使用 C# 实现 Word 自动化:以编程方式创建 Word 表格





5.00/5 (6投票s)
这个技巧给你一个关于如何使用 C# 创建 Word 表格(Word 自动化)的想法
引言
在现实场景中,我们经常需要在 Word 文件中创建报告,需要将“事物”导出到 Word 文件中。在这种情况下,我们需要以编程方式创建和写入 Word 文件,并且要完成这项任务,COM winword 互操作库将为您发挥作用。
Using the Code
我们的目标:以编程方式创建一个 Word 文件并在其中创建一个表格
我们需要的东西:C#,Word 互操作对象
以下是我们为了到达目的地而遵循的代码步骤
- 创建一个简单的 Windows/Web/WPF 应用程序(您也可以使用控制台应用程序或类库,这里我在 Visual Studio 2010 和 Microsoft Word 2007 中使用了 C# 中的 Windows 应用程序)
- 现在只需右键单击解决方案资源管理器,单击添加引用并选择 COM 选项卡
- 选择 Word COM 库(如果您安装了 Word 2007,您将看到 12.0 对象库,如果您安装了 Word 2010,您将看到 14.0 对象库,对于 Word 2013,您将看到 16.0 对象库)
请看下图。 - 添加引用。现在,在解决方案资源管理器的引用文件夹中,您将看到添加了“
Microsoft.Office.Interop.word
”库。 - 现在我们准备好编写代码了,首先我们需要使用 C# 创建一个新的 Word 文档。
- 导入 Word 命名空间并创建 Word 对象。
请看下面的代码片段Word._Application objApp; Word._Document objDoc; objApp = new Word.Application(); objApp.Visible = true; objDoc = objApp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
借助上面的代码,我们将能够创建一个新的 Word 文件。(注意:永远不要创建 Word 文档的
new
对象。).Visible
属性将打开一个新的 Word 文件。 - 现在要在 Word 文档中添加一个新表格,我们需要首先定义书签(这是 Word 文档中我们需要开始编写内容的范围)
请看下面的代码片段来定义 Word 文档的默认书签object objMiss = System.Reflection.Missing.Value; object objEndOfDocFlag = "\\endofdoc"; /* \endofdoc is a predefined bookmark */
- 是的,我们已经成功定义了“文档结尾”标志,现在我们可以首先借助
Paragraph
对象向表格添加一些标题(Paragraph
对象是一个用于在 Word 文档中编写一些文本的对象)
请看下面的代码片段Word.Paragraph objPara1; //define paragraph object object oRng = objDoc.Bookmarks.get_Item(ref objEndOfDocFlag).Range; //go to end of the page objPara1 = objDoc.Content.Paragraphs.Add(ref oRng); //add paragraph at end of document objPara1.Range.Text = "Test Table Caption"; //add some text in paragraph objPara1.Format.SpaceAfter = 10; //define some style objPara1.Range.InsertParagraphAfter(); //insert paragraph
在这里,我们定义了一个段落并将该段落插入到文档的末尾。
- 现在,我们需要定义我们需要绘制的表格的行和列。这里,我绘制了一个 2 行 2 列的表格。
在代码中,只需转到文档的末尾并创建一个 2X2 表格,请看下面的代码片段Word.Table objTab1; Word.Range objWordRng = objDoc.Bookmarks.get_Item(ref objEndOfDocFlag).Range; objTab1 = objDoc.Tables.Add(objWordRng, 2, 2, ref objMiss, ref objMiss); objTab1.Range.ParagraphFormat.SpaceAfter = 6; int iRow, iCols; string strText; for (iRow = 1; iRow <= 2; iRow++) for (iCols = 1; iCols <= 2; iCols++) { strText = "r" + iRow + "c" + iCols; objTab1.Cell(iRow, iCols).Range.Text = strText; } objTab1.Rows[1].Range.Font.Bold = 1; objTab1.Rows[1].Range.Font.Italic = 1;
在这里,我们创建了一个“
word.table
”对象,并借助Range
对象添加了一些文本。//Add text after the table. objWordRng = objDoc.Bookmarks.get_Item(ref objEndOfDocFlag).Range; objWordRng.InsertParagraphAfter(); objWordRng.InsertAfter("THE END.");
我们完成了任务。让我们看看最终代码。
object objMiss = System.Reflection.Missing.Value;
object objEndOfDocFlag =
"\\endofdoc"; /* \endofdoc is a predefined bookmark */
//Start Word and create a new document.
Word._Application objApp;
Word._Document objDoc;
objApp = new Word.Application();
objApp.Visible = true;
objDoc = objApp.Documents.Add(ref objMiss, ref objMiss,
ref objMiss, ref objMiss);
//Insert a paragraph at the end of the document.
Word.Paragraph objPara2; //define paragraph object
object oRng = objDoc.Bookmarks.get_Item
(ref objEndOfDocFlag).Range; //go to end of the page
objPara2 = objDoc.Content.Paragraphs.Add
(ref oRng); //add paragraph at end of document
objPara2.Range.Text = "Test Table Caption"; //add some text in paragraph
objPara2.Format.SpaceAfter = 10; //define some style
objPara2.Range.InsertParagraphAfter(); //insert paragraph
//Insert a 2 x 2 table, (table with 2 row and 2 column)
Word.Table objTab1; //create table object
Word.Range objWordRng = objDoc.Bookmarks.get_Item
(ref objEndOfDocFlag).Range; //go to end of document
objTab1 = objDoc.Tables.Add(objWordRng, 2, 2,
ref objMiss, ref objMiss); //add table object in word document
objTab1.Range.ParagraphFormat.SpaceAfter = 6;
int iRow, iCols;
string strText;
for (iRow = 1; iRow <= 2; iRow++)
for (iCols = 1; iCols <= 2; iCols++)
{
strText = "row:" + iRow + "col:" + iCols;
objTab1.Cell(iRow, iCols).Range.Text = strText; //add some text to cell
}
objTab1.Rows[1].Range.Font.Bold = 1; //make first row of table BOLD
objTab1.Columns[1].Width = objApp.InchesToPoints(3); //increase first column width
//Add some text after table
objWordRng = objDoc.Bookmarks.get_Item(ref objEndOfDocFlag).Range;
objWordRng.InsertParagraphAfter(); //put enter in document
objWordRng.InsertAfter("THIS IS THE SIMPLE WORD DEMO : THANKS YOU.");
object szPath = "test.docx";
objDoc.SaveAs(ref szPath);
总结
所以,我们已经看到,借助一些简单的代码,我们可以开发一个不错的 Word 表格应用程序。
如果您想下载源代码,您可以从帖子顶部的链接下载。
最后
COM 互操作并非易事。我们需要讨论成千上万的事情,我们可以在以后的文章中逐一介绍。
欢迎提出建议和疑问。
感谢您的阅读。