En los últimos dos días, he estudiado cómo usar VS2008 (lenguaje C #) para generar documentos de Word. Aquí hay algunos resúmenes:
1. Muy simple.
2. Requisitos de desarrollo y entorno operativo. El sistema operativo es: Windows XP (instalación de .net framework2.0) / Vista / Win7; la versión completamente instalada de Word2003 debe estar instalada en el sistema operativo. Debe enfatizarse aquí que Word2003 es una versión completamente instalada, porque el desarrollo y la operación del software requieren un componente com: Microsoft word 11.0 Object Library. Si no es la versión completamente instalada de Word2003, puede descargar este componente com e instalarlo manualmente. La dirección de descarga es: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=20923 , el archivo no es grande, solo unos 4M.
3. Configuración del proyecto C #. La configuración de ingeniería aquí es agregar el componente com. Los pasos son: "Agregar referencia" -> pestaña "com" en el Explorador de proyectos-> seleccione Microsoft Word 11.0 Biblioteca de objetos en la lista desplegable. Ok, parece que es lo mismo que agregar un dll general, pero en realidad vs2008 completa una serie de operaciones complejas sobre componentes de llamadas de .net durante este proceso, pero afortunadamente no tenemos que preocuparnos por esto.
4. El siguiente paso es escribir el código. Aquí, el objeto com que usa Word es muy suave como el objeto normal no com. Parece que no importa lo que com no es com en absoluto. Para que el código sea más conciso, puede agregar esta declaración en la parte superior del archivo de código fuente: usando Word = Microsoft.Office.Interop.Word;
5. Es mejor tener una cierta comprensión del modelo de imagen de la palabra, para que al escribir código, no sea tan "confuso". Hay varios objetos más importantes en el modelo de objetos usados: Aplicación, Documento, Selección, Rango, Marcador y otros objetos, como: Párrafo, Sección, Nivel de tabla. Cuando comencé a aprender, sentí que Selección, Rango y Marcador eran un poco confusos. La selección puede ser fácil de entender. Significa el área de selección actual. Si no hay selección, significa la posición del cursor. Range y Bookmark son realmente similares en muchos lugares, pero hay algunas diferencias. No diré mucho aquí, solo google "word.Range".
6. En el proceso de escribir código, a menudo quiero implementar algunas operaciones, pero no sé cómo implementarlo con código porque no estoy familiarizado con la palabra objeto. Por ejemplo, configurar encabezados, agregar números de página y similares, si la operación manual en el programa de Word es, por supuesto, muy simple, pero usar el código para lograrlo, puede no ser tan fácil para los principiantes. En este caso, generalmente hay dos métodos para elegir: uno es el "método Baidu / google", el otro es también el que recomiendo es usar la función "macro de registro" de Word para lograr Después de registrar la operación como una macro, observe el código en la macro. El código en la macro es casi el código que desea (solo la sintaxis es ligeramente diferente).
7. A continuación se proporciona un ejemplo. Este ejemplo incluye algunos gráficos, texto, tablas, edición y diseño de fórmulas comunes, así como configuraciones de página, encabezados y operaciones de número de página. Hay comentarios en él, que están escritos muy claramente.
utilizando el sistema; usando System.Collections.Generic; utilizando System.ComponentModel; usando System.Data; usando System.Drawing; usando System.Text; usando Microsoft.Office.Interop; usando Word = Microsoft.Office.Interop.Word; usando System.Runtime.InteropServices; espacio de nombres WindowsFormsApplication1 { clase parcial pública Form1: System.Windows.Forms. Form { [DllImport ("shell32.dll")] public static extern int ShellExecute (IntPtr hwnd, String lpszOp, String lpszFile, String lpszParams, String lpszDir, int FsShowCmd); Public Form1 () { InitializeComponent (); } private void button1_Click (objeto remitente, EventArgs e) { // Nuevo documento // Word.Application newapp = new Word.Application (); // También puede usar esta oración para inicializar Word.Application newapp = new Word.ApplicationClass (); Word .Document newdoc; object nothing = System.Reflection.Missing.Value; // Se utiliza como el parámetro predeterminado de la función newdoc = newapp.Documents.Add (ref nothing, ref nothing, ref nothing, ref nothing); // Genera una palabra Documento newapp.Visible = true; // Si se muestra la interfaz del programa de palabras /// Configuración de página //newdoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape; //newdoc.PageSetup.PageWidth = newapp.CentimetersToPoints (21.0f); // newdoc.PageSetup.PageHeight = newapp.CentimeterToPoints (29.7f); newdoc. PageSetup.PaperSize = Word.WdPaperSize.wdPaperA4; newdoc.PageSetup.Orientation = Word.WdOrientation.wdOrientPortrait; newdoc.PageSetup.TopMargin = 57.0f; newdoc.PageSetup.BottomMargin = 57.0f; newdoc.PageSetup.LeftMargin = 57.0f ; newdoc.PageSetup.RightMargin = 57.0f; newdoc.PageSetup.HeaderDistance = 30.0f; // posición del encabezado // establecer encabezado newapp.ActiveWindow.View.Type = Word.WdViewType.wdOutlineView; // Ver estilo. newapp.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekPrimaryHeader; // Ingrese la configuración del encabezado, donde el margen del encabezado se ha completado en la configuración de la página newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight; // Insertar página Imágenes de cejas string headerfile = "d: \\ header.jpg"; this.outpicture (archivo de encabezado, Properties.Resources.header); Word.InlineShape shape1 = newapp.ActiveWindow.ActivePane.Selection.InlineShapes.AddPicture (archivo de encabezado, ref. Nada, ref. Nada, ref. Nada); shape1.Height = 30; shape1.Width = 80; newapp.ActiveWindow.ActivePane.Selection.InsertAfter ("中 建 东北 院"); // 去掉 页眉 的 那条 横线 newapp.ActiveWindow.ActivePane.Selection.ParagraphFormat.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom] .LineStyle = Word.WdLineStyle.wdLineStyleNone; newapp.ActiveWindow.ActivePane.Selection.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom] .Visible = false; newapp.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekMainDocument; // 退出 页眉 设置 // 添加 页码 objeto primero = verdadero; Word.PageNumbers pns = newapp.Selection.Sections [1] .Headers [Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterEvenPages] .PageNumbers; pns.NumberStyle = Word.WdPageNumberStyle.wdPageNumberStyleNumberInDash; pns.HeadingLevelForChapter = 0; pns.IncludeChapterNumber = false; pns.ChapterPageSeparator = Word.WdSeparatorType.wdSeparatorHyphen; pns.RestartNumberingAtSection = false; pns.StartingNumber = 0; object pagenmbetal = Word.WdPageNumberAlignment.wdAlignPageNumberCenter; newapp.Selection.Sections [1] .Footers [Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterEvenPages] .PageNumbers.Add (ref pagenmbetal, ref first); // Configuración de texto (Selección significa el conjunto de selección actual, si no hay ningún objeto seleccionado actualmente, significa establecer la posición del cursor) newapp.Selection.Font.Size = 14; newapp.Selection.Font.Bold = 0; newapp.Selection .Font.Color = Word.WdColor.wdColorBlack; newapp.Selection.Font.Name = "宋体"; // Configuración de párrafo newapp.Selection.ParagraphFormat.LineSpacingRule = Word.WdLineSpacing.wdLineSpaceExactly; newapp.Selection.PpagraphFormat. ; objeto de oEndOfDoc = "\\ endofdoc"; Word.Range rang1 = newdoc.Bookmarks.get_Item ref oEndOfDoc) .Range; newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraph. newapp.Selection.ParagraphFormat.FirstLineIndent = 30; newdoc.Content.InsertAfter (WindowsFormsApplication1.Properties.Resources.PreViewWords); // 插入 公式 objeto fieldType = Word.WdFieldType.wdFieldEmpty; fórmula del objeto = @ "eq \ i (a, b, ξxdx)"; objeto presrveFormatting = falso; rang1.Text = formula.ToString (); rang1.Font.Size = 14; rang1.Font.Bold = 0; rang1.Font.Subscript = 0; rang1.Font.Color = Word.WdColor.wdColorBlue; rang1.Font.Name = "宋体"; rang1.ParagraphFormat.LineSpacingRule = Word.WdLineSpacing.wdLineSpaceSingle; rang1.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight; newdoc .Fields.Add (rang1, ref fieldType, ref formula, ref presrveFormatting); // Reemplace las primeras tres palabras del documento con "asdfasdf" y establezca su color en azul object start = 0; object end = 3; Word.Range rang2 = newdoc.Range (inicio de referencia, final de referencia); rang2.Font.Color = Word.WdColor.wdColorBlue; rang2.Text = "como signo"; // Reemplazar "como" al comienzo del documento con "Yuan Bo" rang1.Start = 0; rang1.End = 2; rang1. Text = "This is a"; rang1.InsertAfter ("Book"); //rang1.Select (); object codirection = Word.WdCollapseDirection.wdCollapseStart; rang1.Collapse (ref codirection); // El inicio y el final de rang1 Ambos se establecen al principio o al final de newapp .Selection.EndKey (ref unite, ref nothing); // Mueva el cursor al final del artículo newapp.Selection.Font.Tamaño = 10; /// Negrita los primeros tres caracteres newdoc.Range (ref start, ref end) .Bold = 1; object rang = rang2; newdoc.Bookmarks.Add ("yb", ref rang); object unite = Word.WdUnits.wdStory; newapp.Selection.TypeText (" ............................... (Ecuación 1) \ n "); // Insertar imagen newapp.Selection.EndKey ( ref unir, nada ref); // cursor de texto al final //newapp.Selection.HomeKey(ref Unite, ref nada); // mover el cursor al principio del texto newapp.Selection.ParagraphFormat.LineSpacingRule = Word.WdLineSpacing.wdLineSpaceSingle; newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter; objeto LinkToFile = falso; objeto SaveWithDocument = verdadero; objeto Anchor = newapp.Selection.Range; string picname = "d: \\ kk.jpg"; this.outpicture (picname, Properties.Resources.IMG_2169); newdoc.InlineShapes.AddPicture (picname, ref LinkToFile, ref SaveWithDocument, ref Anchor); newdoc.InlineShapes [1] .Height = 200; newdoc.InlineShapes [1] .Width = 200; newdoc.Content.InsertAfter ("\ n"); newapp.Selection.EndKey (ref unite, ref nothing); // 将 光标 移至 文 末 newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter; newapp.Selection.Font.Size = 10; newapp.Selection.TypeText ("图 1 袁 冶 \ n"); newapp.Selection.ParagraphFormat. Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight; newdoc.Content.InsertAfter ("\ n"); newdoc.Content.InsertAfter ("\ n"); // La fórmula también se puede insertar de esta manera, y este método es más simple newapp .Selection.Font.Size = 14; newapp.Selection.InsertFormula (fórmula de referencia, ref. Nada); newapp.Selection.Font.Size = 10; newapp.Selection.TypeText ("........... ................... (Fórmula 2) \ n "); newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter; newapp.Selection.TypeText ("Table 1 Electronics \ n"); // Insertar tabla Word.Table table1 = newdoc.Tables.Add (newapp.Selection.Range , 4, 3, ref. Nada, ref. Nada); newdoc.Tables [1] .Cell (1, 1) .Range.Text = "Product \ nProyecto newdoc.Tables [1] .Cell (1, 2) .Range.Text = "Computadora "; nProject "; newdoc.Tables [1] .Cell (1, 3) .Range.Text = "Mobile"; newdoc.Tables [1] .Cell (2, 1) .Range.Text = "Weight (kg)"; newdoc.Tables [1] .Cell (3, 1) .Range. Texto = "Precio (yuan)"; newdoc.Tables [1] .Cell (4, 1) .Range.Text = "Información común"; newdoc.Tables [1] .Cell (4, 2) .Range.Text = "Información A"; newdoc.Tables [1] .Cell (4,3) .Range.Text = "Información B"; table1.Select (); table1.Rows.Alignment = Word.WdRowAlignment.wdAlignRowCenter; // 整个 表格 居中 newapp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter; newapp.Selection.Cells.HeightRule = Word.WdRowHeightRule.wdRowHeightExactly; newapp.Selection.Cells.Height = 40; table1.Rows [2] .Height = 20; table1.Rows [3] .Height = 20; table1.Rows [4] .Height = 20; table1.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter; newapp.Selection.Cells.Width = 150; tabla1.Columnas [1]. Ancho = 75; table1.Cell (1, 1) .Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight; table1.Cell (1, 1) .Range.Paragraphs [2] .Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft; // 表 头 斜线 table1.Cell (1, 1) .Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown] .Visible = true; table1.Cell (1, 1) .Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown] .Color = Word.WdColor.wdColorGreen; table1.Cell (1, 1) .Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown] .LineWidth = Word.WdLineWidth.wdLineWidth050pt; // 表格 边框 table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal] .Visible = true; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal] .Color = Word.WdColor.wdColorGreen; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal] .LineWidth = Word.WdLineWidth.wdLineWidth050pt; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical] .Visible = true; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical] .Color = Word.WdColor.wdColorGreen; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical] .LineWidth = Word.WdLineWidth.wdLineWidth050pt; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft] .Visible = true; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight] .Color = Word.WdColor.wdColorGreen; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft] .Color = Word.WdColor.wdColorGreen; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft] .LineWidth = Word.WdLineWidth.wdLineWidth050pt; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft] .LineStyle = Word.WdLineStyle.wdLineStyleDoubleWavy; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight] .Visible = true; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight] .LineWidth = Word.WdLineWidth.wdLineWidth050pt; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight] .LineStyle = Word.WdLineStyle.wdLineStyleDoubleWavy; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom] .Visible = true; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom] .Color = Word.WdColor.wdColorGreen; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom] .LineWidth = Word.WdLineWidth.wdLineWidth050pt; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom] .LineStyle = Word.WdLineStyle.wdLineStyleDouble; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop] .Visible = true; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop] .Color = Word.WdColor.wdColorGreen; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop] .LineWidth = Word.WdLineWidth.wdLineWidth050pt; table1.Borders [Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop] .LineStyle = Word.WdLineStyle.wdLineStyleDouble; // 合并 单元 格 newdoc.Tables [1] .Cell (4, 2) .Merge (table1.Cell (4, 3)); // 删除 图片 this.delpictfile (encabezado); this.delpictfile (picname); // 保存 文档 object name = "c: \\ yb3.doc"; newdoc.SaveAs (nombre de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, nada de referencia, referencia nada); objeto saveOption = Word.WdSaveOptions.wdDoNotSaveChanges; // 关闭 文档 newdoc.Close (nada de referencia, nada de referencia, nada de referencia); newapp.Application.Quit (ref saveOption, ref nothing, ref nothing); newdoc = nulo; newapp = nulo; ShellExecute (IntPtr.Zero, "abierto", "c: \\ yb3.doc", "", "", 3); } imagen privada vacía (string filename, System.Drawing.Bitmap bmap) { bmap.Save (filename); } privado delpictfile (string filename) { System.IO.File.Delete (filename); } } }
引用 于https://m.jb51.net/article/67314.htm