65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2014 年 9 月 13 日

CPOL

3分钟阅读

viewsIcon

76082

downloadIcon

3834

这个技巧给你一个关于如何使用 C# 创建 Word 表格(Word 自动化)的想法

引言

在现实场景中,我们经常需要在 Word 文件中创建报告,需要将“事物”导出到 Word 文件中。在这种情况下,我们需要以编程方式创建和写入 Word 文件,并且要完成这项任务,COM winword 互操作库将为您发挥作用。

Using the Code

我们的目标:以编程方式创建一个 Word 文件并在其中创建一个表格
我们需要的东西:C#,Word 互操作对象

wordC#

以下是我们为了到达目的地而遵循的代码步骤

  1. 创建一个简单的 Windows/Web/WPF 应用程序(您也可以使用控制台应用程序或类库,这里我在 Visual Studio 2010 和 Microsoft Word 2007 中使用了 C# 中的 Windows 应用程序)
  2. 现在只需右键单击解决方案资源管理器,单击添加引用并选择 COM 选项卡
  3. 选择 Word COM 库(如果您安装了 Word 2007,您将看到 12.0 对象库,如果您安装了 Word 2010,您将看到 14.0 对象库,对于 Word 2013,您将看到 16.0 对象库)
    请看下图。

    Add_Reference

  4. 添加引用。现在,在解决方案资源管理器的引用文件夹中,您将看到添加了“Microsoft.Office.Interop.word”库。
  5. 现在我们准备好编写代码了,首先我们需要使用 C# 创建一个新的 Word 文档。
  6. 导入 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 文件。

  7. 现在要在 Word 文档中添加一个新表格,我们需要首先定义书签(这是 Word 文档中我们需要开始编写内容的范围)
    请看下面的代码片段来定义 Word 文档的默认书签
     object objMiss = System.Reflection.Missing.Value;  
     object objEndOfDocFlag = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ 
  8. 是的,我们已经成功定义了“文档结尾”标志,现在我们可以首先借助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 

    在这里,我们定义了一个段落并将该段落插入到文档的末尾。

  9. 现在,我们需要定义我们需要绘制的表格的行和列。这里,我绘制了一个 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 互操作并非易事。我们需要讨论成千上万的事情,我们可以在以后的文章中逐一介绍。

欢迎提出建议和疑问。

感谢您的阅读。

© . All rights reserved.