有关本文的 Microsoft Visual C# .NET 版本,请参阅 316384。
有关本文的 Microsoft Visual Basic 6.0 版本,请参阅 313193。
摘要
本文分步介绍如何使用 Visual Basic .NET 中的自动化在 Word 中创建新文档。
示例代码
本文中的示例代码演示如何执行以下操作:
-
插入包含文本和格式的段落。
-
浏览和修改文档中的各种范围。
-
插入表、设置表格式,并使用数据填充表。
-
添加图表。
若要使用 Visual Basic .NET 中的自动化创建新的 Word 文档,请执行以下步骤:
-
启动 Microsoft Visual Studio .NET。 在“文件”菜单上,单击“新建”,然后单击“项目”。 在“项目类型”下,单击“Visual Basic 项目”,然后单击“模板”下的“Windows 应用程序”。 默认情况下,将创建 Form1。
-
添加对 Microsoft Word 对象库的引用。 为此,请按照下列步骤操作:
-
在“项目”菜单上,单击“添加引用”。
-
在“COM”选项卡上,找到“Microsoft Word 对象库”,然后单击“选择”。
注意 Microsoft Office 2003 及更高版本的 Office 包括主互操作程序集 (PIA) 。 Microsoft Office XP 不包括 PIA,但可以下载它们。
-
在“添加引用”对话框中单击“确定”以接受你的选择。 如果收到为所选库生成包装器的提示,请单击“是”。
-
-
在“视图”菜单上,选择“工具箱”以显示“工具箱”,然后将按钮添加到 Form1。
-
双击 Button1。 此时将显示窗体的代码窗口。
-
在代码窗口中,替换以下代码
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click End Sub
替换为:
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim oWord As Word.Application Dim oDoc As Word.Document Dim oTable As Word.Table Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph Dim oPara3 As Word.Paragraph, oPara4 As Word.Paragraph Dim oRng As Word.Range Dim oShape As Word.InlineShape Dim oChart As Object Dim Pos As Double 'Start Word and open the document template. oWord = CreateObject("Word.Application") oWord.Visible = True oDoc = oWord.Documents.Add 'Insert a paragraph at the beginning of the document. oPara1 = oDoc.Content.Paragraphs.Add oPara1.Range.Text = "Heading 1" oPara1.Range.Font.Bold = True oPara1.Format.SpaceAfter = 24 '24 pt spacing after paragraph. oPara1.Range.InsertParagraphAfter() 'Insert a paragraph at the end of the document. '** \endofdoc is a predefined bookmark. oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range) oPara2.Range.Text = "Heading 2" oPara2.Format.SpaceAfter = 6 oPara2.Range.InsertParagraphAfter() 'Insert another paragraph. oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range) oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:" oPara3.Range.Font.Bold = False 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. Dim r As Integer, c As Integer oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, 3, 5) oTable.Range.ParagraphFormat.SpaceAfter = 6 For r = 1 To 3 For c = 1 To 5 oTable.Cell(r, c).Range.Text = "r" & r & "c" & c Next Next oTable.Rows.Item(1).Range.Font.Bold = True oTable.Rows.Item(1).Range.Font.Italic = True 'Add some text after the table. 'oTable.Range.InsertParagraphAfter() oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").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. oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, 5, 2) oTable.Range.ParagraphFormat.SpaceAfter = 6 For r = 1 To 5 For c = 1 To 2 oTable.Cell(r, c).Range.Text = "r" & r & "c" & c Next Next oTable.Columns.Item(1).Width = oWord.InchesToPoints(2) 'Change width of columns 1 & 2 oTable.Columns.Item(2).Width = oWord.InchesToPoints(3) 'Keep inserting text. When you get to 7 inches from top of the 'document, insert a hard page break. Pos = oWord.InchesToPoints(7) oDoc.Bookmarks.Item("\endofdoc").Range.InsertParagraphAfter() Do oRng = oDoc.Bookmarks.Item("\endofdoc").Range oRng.ParagraphFormat.SpaceAfter = 6 oRng.InsertAfter("A line of text") oRng.InsertParagraphAfter() Loop While Pos >= oRng.Information(Word.WdInformation.wdVerticalPositionRelativeToPage) oRng.Collapse(Word.WdCollapseDirection.wdCollapseEnd) oRng.InsertBreak(Word.WdBreakType.wdPageBreak) oRng.Collapse(Word.WdCollapseDirection.wdCollapseEnd) oRng.InsertAfter("We're now on page 2. Here's my chart:") oRng.InsertParagraphAfter() 'Insert a chart and change the chart. oShape = oDoc.Bookmarks.Item("\endofdoc").Range.InlineShapes.AddOLEObject( _ ClassType:="MSGraph.Chart.8", FileName _ :="", LinkToFile:=False, DisplayAsIcon:=False) oChart = oShape.OLEFormat.Object oChart.charttype = 4 'xlLine = 4 oChart.Application.Update() oChart.Application.Quit() 'If desired, you can proceed from here using the Microsoft Graph 'Object model on the oChart object to make additional changes to the 'chart. oShape.Width = oWord.InchesToPoints(6.25) oShape.Height = oWord.InchesToPoints(3.57) 'Add text after the chart. oRng = oDoc.Bookmarks.Item("\endofdoc").Range oRng.InsertParagraphAfter() oRng.InsertAfter("THE END.") 'All done. Close this form. Me.Close() End Sub
-
将以下代码添加到 Form1.vb 的顶部:
Imports Word = Microsoft.Office.Interop.Word
-
按 F5 生成并运行程序。
代码完成后,检查为你创建的文档。 文档包含两页带格式的段落、表格和图表。
使用模板
如果使用自动化来生成全部采用通用格式的文档,则可以从使用基于预格式化模板的新文档开始该过程中获益。 将模板与 Word 自动化客户端配合使用比从无生成文档有两个显著优势:
-
可以更好地控制整个文档中对象的格式和位置。
-
可以使用更少的代码生成文档。
通过使用模板,可以微调文档内表格、段落和其他对象的位置,以及包括这些对象的格式设置。 通过使用自动化,可以使用如下所示的代码基于模板创建新文档:
oWord.Documents.Add "<Path to your template>\MyTemplate.dot"
在模板中,可以定义书签,以便自动化客户端可以在文档中的特定位置填充变量文本,如下所示:
oDoc.Bookmarks.Item("MyBookmark").Range.Text = "Some Text Here"
使用模板的另一个优势是,可以创建和存储希望在运行时应用的格式样式,如下所示:
oDoc.Bookmarks.Item("MyBookmark").Range.Style = "MyStyle"
-或-
oWord.Selection.Style = "MyStyle"
参考
有关使用 Visual Basic .NET 自动执行 Microsoft Word 的详细信息,请单击下面的序列号以查看 Microsoft 知识库中的文章:
301656 如何自动执行 Word 以从 Visual Basic .NET 执行邮件合并