Автоматизация создания документов в Word с помощью Visual Basic .NET

Версия данной статьи для Microsoft Visual C# .NET: 316384 .

Версия данной статьи для Microsoft Visual Basic 6.0: 313193 .

Аннотация

В этой статье подробно рассматривается создание документов Word с помощью возможностей автоматизации Visual Basic.

Пример кода

Следующий пример кода показывает, как это сделать:
  • Вставка абзацев с определенными параметрами форматирования.
  • Модификация диапазонов в рамках документа.
  • Вставка, форматирование и заполнение таблиц.
  • Добавление диаграммы.
Для создания документа Word с помощью Visual Basic необходимо выполнить следующие действия.
  1. Запустите приложение Microsoft Visual Studio .NET. В меню Файл выберите команду Создать, а затем — Проект. В списке Типы проектов выберите проект Проекты Visual Basic, а затем в разделе Шаблоны — элемент Приложение Windows. По умолчанию будет создана форма Form1.
  2. Добавьте ссылку на объектную библиотеку Microsoft Word Object Library. Для этого выполните следующие действия:
    1. В меню Проект выберите команду Добавить ссылку.
    2. На вкладке COM выделите библиотеку Microsoft Word Object Library и нажмите кнопку Выбрать.

      Примечание. В состав Microsoft Office 2003 и более поздних версий набора Office входят основные сборки взаимодействия (PIA). Набор Microsoft Office XP не включает эти сборки, но их можно загрузить.
      Чтобы узнать больше об основных сборках взаимодействия PIA для Office XP, щелкните номер следующей статьи базы знаний Майкрософт:

      328912 Загрузка основных сборок взаимодействия (PIA) для набора Microsoft Office XP

    3. Для подтверждения сделанного выбора нажмите кнопку OK в диалоговом окне Add References. Если появится запрос на создание оберток для выбранных библиотек, нажмите кнопку Yes.
  3. Для отображения панели элементов выберите в меню View элемент Toolbox и добавьте кнопку в форму Form1.
  4. Дважды щелкните кнопку Button1. Появится окно программного кода формы.
  5. В окне кода замените следующий код:
        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
  6. Добавьте следующий код в верхнюю часть файла Form1.vb:
    Imports Word = Microsoft.Office.Interop.Word
  7. Чтобы построить и запустить программу, нажмите клавишу F5.
После завершения кода проверьте созданный документ. Документ содержит две страницы форматированных абзацев, таблицы и диаграмму.

Использование шаблона

Если вы используете автоматизацию для построения документов в одинаковом формате, вы можете запустить процесс с новым документом на основе предварительно отформатированного шаблона. Использование шаблона имеет два существенных преимущества по сравнению с созданием документа с нуля.
  • Разработчик более полно контролирует формат и расположение объектов в документах.
  • Уменьшается размер программного кода, который нужен для создания документа.
Вы можете точно указать место расположения и формат объектов (например таблиц и абзацев) в рамках документа, а также включить форматирование этих объектов. Ниже приведен пример программного кода для автоматизации создания документа на основе шаблона.
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 обратитесь к следующей статье базы знаний Майкрософт:

301656 Автоматизация Microsoft Word для слияния почты из Visual Basic .NET.

Дополнительные сведения см. на следующих веб-сайтах Microsoft Developer Network (MSDN):
Использование Visual Studio для разработки в Microsoft Office
http://msdn.microsoft.com/ru-ru/library/aa188489(office.10).aspx

Word в составе набора Office
http://msdn.microsoft.com/ru-ru/library/aa201330(office.11).aspx

Дополнительно о программе Word
http://msdn.microsoft.com/ru-ru/library/aa201332(office.11).aspx
Свойства

Номер статьи: 316383 — последний просмотр: 26 февр. 2014 г. — редакция: 1

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Office Word 2007, русская версия, Microsoft Word 2002 Standard Edition, Microsoft Word 2010, Microsoft Visual Basic 2005, Microsoft Visual Basic 2005 Express Edition, Microsoft Visual Basic 2008 Express Edition, Microsoft Visual Basic 2010 Express

Отзывы и предложения