概要
<script type="text/javascript"> loadTOCNode(1, 'summary'); </script> 本文分步介绍如何利用 Visual C# .NET 的自动化功能在 Word 中创建新文档。
代码示例
<script type="text/javascript"> loadTOCNode(3, 'summary'); </script> 本文中的代码示例将说明如何完成以下任务:
• | 插入包含文本和格式的段落。 |
• | 浏览和修改文档中的不同范围。 |
• | 插入表格、设置表格格式并在表格中填充数据。 |
• | 添加图表。 |
要利用 Visual C# .NET 的自动化功能创建新的 Word 文档,请执行以下步骤:
1. | 启动 Microsoft Visual Studio .NET。在文件菜单上,单击新建,然后单击项目。在项目类型下,单击 Visual C# 项目,然后单击模板下的 Windows 应用程序。默认情况下会创建 Form1。 | ||||||
2. | 添加对 Microsoft Word 对象库的引用。为此,请按照下列步骤操作:
| ||||||
3. | 在视图菜单上,选择工具箱以显示工具箱,然后向 Form1 添加一个按钮。 | ||||||
4. | 双击 Button1。出现该窗体的代码窗口。 | ||||||
5. | 在代码窗口中,将以下代码 private void button1_Click(object sender, System.EventArgs e) { } 替换为: private void button1_Click(object sender, System.EventArgs e) { object oMissing = System.Reflection.Missing.Value; object oEndOfDoc = "//endofdoc"; /* /endofdoc is a predefined bookmark */ //Start Word and create a new document. Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true; oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing); //Insert a paragraph at the beginning of the document. Word.Paragraph oPara1; oPara1 =oDoc.Content.Paragraphs.Add(ref oMissing); oPara1.Range.Text = "Heading 1"; oPara1.Range.Font.Bold = 1; oPara1.Format.SpaceAfter = 24; //24 pt spacing after paragraph. oPara1.Range.InsertParagraphAfter(); //Insert a paragraph at the end of the document. Word.Paragraph oPara2; object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oPara2 = oDoc.Content.Paragraphs.Add(ref oRng); oPara2.Range.Text = "Heading 2"; oPara2.Format.SpaceAfter = 6; oPara2.Range.InsertParagraphAfter(); //Insert another paragraph. Word.Paragraph oPara3; oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oPara3 = oDoc.Content.Paragraphs.Add(ref oRng); oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:"; oPara3.Range.Font.Bold = 0; oPara3.Format.SpaceAfter = 24; oPara3.Range.InsertParagraphAfter(); //Insert a 3 x 5 table, fill it with data, and make the first row //bold and italic. Word.Table oTable; Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing); oTable.Range.ParagraphFormat.SpaceAfter = 6; int r, c; string strText; for(r = 1; r <= 3; r++) for(c = 1; c <= 5; c++) { strText = "r" + r + "c" + c; oTable.Cell(r, c).Range.Text = strText; } oTable.Rows[1].Range.Font.Bold = 1; oTable.Rows[1].Range.Font.Italic = 1; //Add some text after the table. Word.Paragraph oPara4; oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; //在最后一段获得一个Range对象 Para4 = oDoc.Content.Paragraphs.Add(ref oRng);//使得Range对象和段落关联起来 oPara4.Range.InsertParagraphBefore(); oPara4.Range.Text = "And here's another table:"; //准备插入另一张表 oPara4.Format.SpaceAfter = 24; oPara4.Range.InsertParagraphAfter(); //Insert a 5 x 2 table, fill it with data, and change the column widths. wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;//在最后一段获得一个Range对象 oTable = oDoc.Tables.Add(wrdRng, 5, 2, ref oMissing, ref oMissing); oTable.Range.ParagraphFormat.SpaceAfter = 6; for(r = 1; r <= 5; r++) { for(c = 1; c <= 2; c++) { strText = "r" + r + "c" + c; oTable.Cell(r, c).Range.Text = strText; } } //Change width of columns 1 & 2 oTable.Columns[1].Width = oWord.InchesToPoints(2); oTable.Columns[2].Width = oWord.InchesToPoints(3); //Keep inserting text. When you get to 7 inches from top of the document, insert a hard page break. object oPos; double dPos = oWord.InchesToPoints(7); oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertParagraphAfter(); do { wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; wrdRng.ParagraphFormat.SpaceAfter = 6; wrdRng.InsertAfter("A line of text"); wrdRng.InsertParagraphAfter(); oPos = wrdRng.get_Information (Word.WdInformation.wdVerticalPositionRelativeToPage); }while(dPos >= Convert.ToDouble(oPos)); object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd; object oPageBreak = Word.WdBreakType.wdPageBreak; wrdRng.Collapse(ref oCollapseEnd); wrdRng.InsertBreak(ref oPageBreak); wrdRng.Collapse(ref oCollapseEnd); wrdRng.InsertAfter("We're now on page 2. Here's my chart:"); wrdRng.InsertParagraphAfter(); //Insert a chart. Word.InlineShape oShape; object oClassType = "MSGraph.Chart.8"; wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oShape = wrdRng.InlineShapes.AddOLEObject(ref oClassType, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); //就是这句话加入的chart //Demonstrate use of late bound oChart and oChartApp objects to manipulate the chart object with MSGraph. object oChart; object oChartApp; oChart = oShape.OLEFormat.Object; oChartApp = oChart.GetType().InvokeMember("Application", BindingFlags.GetProperty, null, oChart, null); //Change the chart type to Line. object[] Parameters = new Object[1]; Parameters[0] = 4; //xlLine = 4 oChart.GetType().InvokeMember("ChartType", BindingFlags.SetProperty, null, oChart, Parameters); //Update the chart image and quit MSGraph. oChartApp.GetType().InvokeMember("Update", BindingFlags.InvokeMethod, null, oChartApp, null); oChartApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, oChartApp, null); //... If desired, you can proceed from here using the Microsoft Graph Object model on the oChart and oChartApp objects to make additional changes to the chart. Set the width of the chart. oShape.Width = oWord.InchesToPoints(6.25f); oShape.Height = oWord.InchesToPoints(3.57f); //Add text after the chart. wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; wrdRng.InsertParagraphAfter(); wrdRng.InsertAfter("THE END."); //Close this form. this.Close(); }
| ||||||
6. | 滚动到代码窗口的顶部。将下面的代码行添加到 using 指令列表的末尾: using Word = Microsoft.Office.Interop.Word; using System.Reflection; | ||||||
7. | 按 F5 键生成并运行程序。 | ||||||
8. | 单击 Button1,启动 Word 自动化功能并创建文档。 |
代码执行完成后,检查为您创建的文档。该文档包含两页设置了格式的段落、表格和图表。
使用模板
<script type="text/javascript"> loadTOCNode(3, 'summary'); </script> 如果您要使用自动化功能创建的文档都是通用格式,则利用基于预设格式的模板的新文档来开始创建过程会更加容易。与从头创建文档相比,将某个模板与 Word 自动化客户端配合使用有两大优点:
• | 您可以对整个文档中的对象的格式设置和布局施加更多控制。 |
• | 可以使用较少的代码创建文档。 |
通过使用模板,可以精确地调整表格、段落和其他对象在文档中的布局,并可为这些对象添加格式设置。通过使用自动化功能,可以基于包含下面这样的代码的模板创建新文档:
object oTemplate = "c://MyTemplate.dot"; oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
在模板中,可以定义书签,这样,自动化客户端就可以在文档的特定位置加入可变文本,如下所示:
object oBookMark = "MyBookmark"; oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";
使用模板的另一个优点在于,您可以创建和存储希望在运行时应用的格式样式,如下所示:
object oStyleName = "MyStyle"; oDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);
- 或者 -
object oStyleName = "MyStyle"; oWord.Selection.set_Style(ref oStyleName);