Vbs работа с word

Иногда бывает задача получить какие-либо данные из word-кого документа и потом что-то с ними сделать дальше. Так же бывает и обратная задача: необходимо создать Word документ и записать в него какие-либо данные, а затем сохранить его на диск.

В данной заметке приведены небольшие примеры, показывающие как открыть word документ и прочитать из него текстовые данные на VBScript, а так же как создать пустой word документ, добавить в него текстовые данные, а затем записать его.

Пример чтения Word документа на VBScript

Set Wrd = CreateObject("Word.Application")
Set Doc = Wrd.Documents.Open("C:test.doc")
Set Pars = Doc.Range().Paragraphs
For Each Par In Pars
  txt = Par.Range.Text
  ' Что-то делаем с текстовыми данными из word-кого документа

Next
Doc.Close
Wrd.Quit False

Сначала запускаем Word в 1-й строке, во 2-й строке открываем word-кий документ (путь лучше указывать абсолютный).

Затем в 3-й строке получаем все параграфы, которые есть в документе и в 4-й строке в цикле проходим по всем.

В двух последних строках закрываем документ и закрываем сам Word, изменения не сохраняем (False).

Пример создания Word документа и добавления текста на VBScript

Set Wrd = CreateObject("Word.Application")
Set Doc = Wrd.Documents.Add()

Set Par = Doc.Content.Paragraphs.Add
Par.Range.Text = "Пример текста"
Par.Range.Font.Bold = True
Par.Range.InsertParagraphAfter()

Doc.SaveAs("c:Мои документыtest.docx")
Wrd.Quit

Первые 2 строки запускают Word и содают новый документ.

Строки 4-7 добавлют параграф с текстом, выделенным жирным шрифтом.

Последние строки сохраняют документ под именем test.docx и закрывают word.

Пример создания Word документа и добавления в него таблицы

Set Wrd = CreateObject("Word.Application")
Set Doc = Wrd.Documents.Add()

Set Table = Doc.Tables.Add(Doc.Bookmarks.Item("endofdoc").Range, 3, 5)
Table.Range.ParagraphFormat.SpaceAfter = 6
For r = 1 To 3
  For c = 1 To 5
    Table.Cell(r, c).Range.Text = "Ячейка " & r & " x " & c
  Next
Next
Table.Rows.Item(1).Range.Font.Bold = True
Table.Rows.Item(1).Range.Font.Italic = True

Doc.SaveAs("c:Мои документыtest.docx")
Wrd.Quit

Эти простые примеры показывают минимальные возможности автоматизации чтения и записи word документов на VBScript, а дальше, можно написать более сложные программы, используя те же приемы, что используются в Visual Basic или других языках для работы с word-ом.

Всем привет.

В данной статье я расскажу вам про базовый функционал для работы с Microsoft Office при помощи VBS.

Ниже привожу код, который я подробно прокомментировал:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Option Explicit ‘ Инструкция, которая будет «ругаться», если переменные не будут явно объявляться

Dim oWord ‘ объявляем переменные

Dim oDoc

Dim oSelectionPlace

Set oWord = CreateObject(«Word.Application») ‘ Создаём объект с Word-ом

oWord.Visible = True ‘ делаем видимым Word

Set oDoc = oWord.Documents.Add() ‘ Добавляем документ

Set oSelectionPlace = oWord.Selection ‘ Получаем доступ к выделенной области

oSelectionPlace.TypeParagraph() ‘ Делаем параграф

oSelectionPlace.Paragraphs.Alignment = 1 ‘ Выравнивание текста по центру. 0 левый край, 1 по центру, 2 правый край, 3 по ширине

oSelectionPlace.Font.Name = «Calibri» ‘ Указываем желаемый шрифт

oSelectionPlace.Font.Size = «40» ‘ Указываем размер шрифта

oSelectionPlace.Font.Bold = True ‘ Устанавливаем жирный текст

oSelectionPlace.Font.Color = RGB(19, 77, 158) ‘ Устанавливаем цвет текста

oSelectionPlace.TypeText «Progtask.ru» ‘ Вводим текст

oSelectionPlace.TypeParagraph() ‘ Делаем параграф

oSelectionPlace.Font.Size = «20» ‘ Устанавливаем размер шрифта

oSelectionPlace.Font.Color = RGB(167, 8, 93) ‘ Устанавливаем цвет текста

oSelectionPlace.TypeText «Записки программиста» ‘ Вводим текст

oDoc.Save ‘ сохраняем документ

oDoc.Close ‘ закрываем документ

oWord.Quit ‘ закрываем Word

Результат выполнения данного скрипта:

result script vbs word

Кстати, для того чтобы русский текст отображался нормально, а не кракозябрами, файл необходимо сохранять в кодировке UCS-2 LE BOM. Это можно сделать к примеру через Notepad++:

encoding notepad++

Надеюсь вам помогла данная статья.

Загрузка…

Используем сценарии VBScript

Создавать текстовые файлы, используя сценарии, достаточно легко, так как среда Windows в целом и окружение Windows Script Host (WSH) в частности предоставляют специальные средства для работы с текстовыми файлами. Однако, хотя текстовые файлы идеальны для хранения простой неструктурированной информации, их недостаточно в случае более сложных требований. Если необходимо представить иерархическую информацию, можно воспользоваться средствами XML и создавать текст с метками, содержащий (или не содержащий) обращение к схеме. Однако часто приходится создавать документы, которые представляют информацию, использующую сложную разметку. Файлы HTML являются альтернативой связывания данных и сложной разметки страницы. Однако документы HTML представляют собой открытый текст и в принципе являются легкой добычей для злоумышленников. К тому же документы HTML редко бывают самодостаточными и часто содержат ссылки на внешние ресурсы, такие как изображения, управляющие элементы ActiveX и апплеты.

В отличие от рассмотренных выше решений, пакет Microsoft Word фактически является стандартом в документообороте реального мира. Создавать такие документы в интерактивном режиме легко, но можно ли автоматизировать этот процесс, создавая программно и используя документы, основанные на шаблонах? Да, и сейчас я объясню почему. Я не буду вдаваться в детали той стороны процесса, которая касается работы в пакете Word. Вместо этого я уделю внимание программному созданию и управлению документами, предположив, что читатели знакомы с основами работы с шаблонами и закладками Word.

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

Иногда мне бывает нужно подготовить счета, потом распечатать их для рассылки писем или распространить с помощью электронной почты. Обычно я открываю Word, выбираю свой шаблон счета, ввожу необходимую информацию и сохраняю файл как новый документ. Потом я посылаю счет клиенту по обычной почте либо в качестве документа, прикрепленного к электронному сообщению.

В большинстве случаев счета и другие формы являются простыми документами, использующими одинаковые шаблоны, но содержат различную информацию, такую как дата, номер счета, описание и сумма счета. Шаблон, на котором основан документ, обычно содержит одно или несколько пустых полей, в которые пользователи могут добавлять данные, характерные для конкретной формы.

В пакете Word можно создавать формы для стандартных документов, таких как счета, настраивая файл-шаблон с расширением .dot. Когда требуется подготовить новый документ на основе шаблона, следует щелкнуть на пункте меню File, New. После выбора нужного шаблона в окне New и нажатия кнопки OK Word создает и отображает новую форму, основанную на этом шаблоне. В соответствующие поля пустой формы вводится различная информация.

При использовании Word в интерактивном режиме пользователь может видеть, куда необходимо ввести информацию. Но как заставить вводить различную информацию в нужные поля сценария WSH? Прежде чем я отвечу на этот вопрос, давайте рассмотрим объектную модель Word — инфраструктуру на основе COM, которая помогает программно управлять поведением пакета Word.

Объектная модель Word

Объектная модель Word содержит богатую и сложную иерархию объектов. Эта объектная модель программно раскрывает интерактивные функции Word для ориентированных на COM клиентов (т. е. сценариев WSH и Visual Basic(VB)). Корневым элементом объектной модели Word является объект Word.Application. Для создания экземпляра этого объекта необходимо использовать следующий код:

Dim word
Set word = CreateObject _
(Word.Application)

Объектная модель Word работает с исполняемым файлом Word (winword.exe), а не с отдельной библиотекой DLL. Таким образом, каждый экземпляр объекта Word.Application эквивалентен запуску и работе экземпляра приложения Word. Однако эти экземпляры невидимы. А поскольку мы не можем их видеть, есть риск появления множества экземпляров, которые существуют бесцельно, понапрасну расходуя системные ресурсы. Чтобы избежать распространения бесполезных экземпляров Word, необходимо сделать так, чтобы сценарии всегда освобождали объект после завершения работы с ним с помощью метода Quit:

word.Quit

Хотя заново создаваемые экземпляры Word по умолчанию невидимы, можно сделать их видимыми, задав свойству Visible значение True:

word.Visible = True

Когда экземпляр виден, можно закрыть приложение вручную. Установка свойства Visible в True может очень пригодиться при отладке приложений Word на основе сценариев.

Работа с элементами объектной модели Word полностью совпадает с работой приложения в интерактивном режиме. После инициализации приложения мы создаем новый документ или открываем существующий. Для создания нового пустого документа на основе определенного шаблона следует вызвать метод Add из коллекции Documents и указать файл .dot, где хранится нужный шаблон. Приведенный ниже код создает документ, который содержит возможности, встроенные в шаблон, названный Invoice:

Set doc = _
word.Documents.Add(invoice.dot)

Для открытия существующего документа следует использовать коллекцию Documents, содержащую объекты Document. Код, приведенный в листинге 1, открывает документы invoice.doc и expenses.doc. Этот фрагмент кода сначала открывает файл invoice.doc, потом — expenses.doc. Здесь статус программно созданного документа в точности соответствует статусу документа-шаблона, который вы открыли интерактивно с помощью пункта Open меню File, работая в приложении Word. Если вы сделали экземпляр видимым, на экране появятся окна документов из файлов invoice.doc и expenses.doc.

Переменные doc1 и doc2, используемые в листинге, ссылаются на объекты, представляющие вновь открытые документы Word. Также можно использовать индекс к коллекции Documents для обращения к открытым файлам. Например, следующий код возвращает ссылку на первый открытый документ:

Set doc1 = word.Documents(0)

Этот фрагмент кода эквивалентен присвоению переменной doc1 результата вызова метода Documents.Add, как показано во второй строке листинга 1.

Программный интерфейс объекта Document содержит все функции, доступные в меню File и Edit пакета Word. Для печати документа следует использовать метод PrintOut объекта Document; для записи документа в другое место — метод SaveAs. Когда Word применяется интерактивно, оба метода представляют диалоговое окно, позволяющее выбрать принтер и путь. При использовании метода PrintOut или SaveAs можно указать принтер или путь к файлу в качестве аргумента, как показано ниже:

doc.SaveAs _
C:data
ewinvoice.doc

Когда путь указывается в качестве аргумента, диалоговое окно не отображается.

Метод SaveAs также позволяет вводить дополнительный аргумент, для указания выходного формата (например, документ Word, формат Rich Text Format (RTF) — Word 6.0, неформатированный текст). Приведенный ниже фрагмент кода показывает, как сохранить документ в формате RTF:

Const wdFormatRTF = 6
docn.SaveAs _
C:data
ewinvoice.doc, _
wdFormatRTF

За дополнительной информацией о константах, обозначающих различные форматы файла, следует обратиться к документации пакета Word.

Чтобы закрыть документ, нужно использовать метод Close:

doc1.Close

При закрытии документа все документы, открытые после него, автоматически перемещаются на одну позицию вверх. Так что, если использовать код:

Set doc1 = word.Documents(0)
Set doc2 = word.Documents(1)

и впоследствии закрыть ссылку на переменную doc1, на позиции переменной doc2 в массиве окажется Documents(0).

Когда работа с документами Word ведется программно, можно связывать форматы и стили с абзацами, словами и символами в документе, так же как при интерактивном использовании Word. Кроме того, можно добавлять комментарии и закладки к элементам документа. При программном создании документов Word на основе шаблона можно использовать закладки для ввода пользовательских данных в нужные места документа.

Использование закладок в пакете Word

Под закладкой понимается связь между именем и определенным местом в документе Word. Закладки — особенность пакета Word, которую можно использовать для пометки выбранного текста, графики, таблиц или любого другого элемента документа. Word хранит закладки в документе. Для добавления закладки в интерактивном режиме следует выбрать текст или элемент, который требуется пометить, потом выбрать пункт Bookmark в меню Insert. В окне Bookmark нужно ввести имя создаваемой закладки.

Например, предположим, у нас есть шаблон Word (файл .dot) и нам нужно просмотреть текущие данные в определенной позиции. Откроем шаблон и выберем область, отведенную под данные. Чтобы упростить правку шаблона в будущем, можно ввести текст указателя места заполнения, описывающий данную область (например: данные о счете размещать здесь). После ввода текста указателя места заполнения следует выбрать текст, выбрать в меню Insert пункт Bookmark, ввести имя закладки (например, InvoiceDate), после чего сохранить шаблон.

После того как будет программно создан на основе шаблона новый документ, нужно использовать коллекцию Bookmarks документа для распознавания закладок и изменения их текста. Например, чтобы ввести данные в закладку InvoiceDate, необходимо использовать код, подобный следующему:

Set dateBookMark = _
doc.Bookmarks(InvoiceDate)
dateBookMark.Range.Text = _
7/1/2002

Как показывает данный фрагмент кода, обращение к закладке осуществляется через ее имя. Имя закладки указывает на нужный помеченный объект в коллекции Bookmarks документа. Свойство Range является объектом класса TextRange. Это свойство определяет настройки области текста закладки. Свойство Text объекта TextRange позволяет читать и переписывать текущее значение закладки. Приведенный выше фрагмент кода задает для даты счета значение 7/1/2002.

Создание счета

После программного создания документа на основе шаблона следует использовать закладки для заполнения формы счета свежими данными и сохранить документ в новый файл. Теперь можно распечатать документ, отправить его кому-нибудь по электронной почте и т. д.

В листинге 2 показан сценарий CreateInvoice.vbs, который собирает определенную информацию и составляет счет. Код открывает шаблон TestInvoice.dot, расположенный в той же папке, что и сценарий, когда создает новый документ на его основе (можно скачать файл TestInvoice.dot с нашего сайта в разделе Download). На рис. 1 показан шаблон TestInvoice.dot.


Рисунок. Шаблон TestInvoice.dot

Сценарий CreateInvoice.vbs запрашивает у пользователя номер счета, дату и имя адресата. Код фрагмента A в листинге 2 использует закладки для внедрения этой информации в основной документ. Затем код фрагмента B использует метод SaveAs для сохранения документа в текущей папке. Сценарий CreateInvoice.vbs создает имя готового документа, соединяя номер счета с префиксом inv_. Способ именования и папка назначения заданы условно. В конце сценарий CreateInvoice.vbs закрывает документ и приложение.

Отправка документа по электронной почте

Объектная модель Word содержит метод объекта Document, который позволяет послать документ по электронной почте:

doc.SendMail

Как можно заметить, метод SendMail не имеет аргументов. Он вызывает зарегистрированный клиент интерфейса Messaging API (MAPI) — обычно Microsoft Outlook или Outlook Express. Появляется окно электронного письма с присоединенным к нему документом Word. Пользователь просто заполняет поле To и нажимает кнопку Send. В папке Sent Items почтового клиента автоматически регистрируется отправка сообщения. Если пользовать не имеет постоянного соединения, почтовый клиент помещает сообщение в папку Outbox для отправки при следующем подключении.

При использовании метода SendMail необходимо убедиться, что сценарий не закрывает приложение Word до появления окна электронной почты. Метод SendMail работает асинхронно относительно основного сценария, поэтому сценарий не имеет возможности убедиться в том, что метод закончил отправку сообщения. Если сценарий попытается закрыть Word до завершения работы метода SendMail, система выдаст сообщение, что невозможно закрыть Word, пока не завершится выполнение команды. Если окно с таким сообщением появляется, пользователь должен закрывать его вручную. Чтобы избежать подобной ситуации, можно добавить вызов процедуры Sleep, как я сделал во фрагменте B листинга 2, чтобы временно остановить выполнение сценария и дать методу SendMail время на завершение. Кроме того, можно добавить собственное окно подтверждения в свой сценарий, тогда пользователь сможет подтверждать отправку письма. Приведенный ниже код отображает окно подтверждения Done непосредственно перед тем, как сценарий закрывает Word:

doc.SendMail
MsgBox Done

Большинство форм сегодня представляют собой простые документы Word. После интерактивного создания шаблона в пакете Word можно без труда написать сценарий, подобный приведенному в статье, для заполнения формы пользовательской информацией, после чего позвольте окружению WSH и объектной модели Word завершить начатое.

Оценив это простое и эффективное решение, многие захотят использовать его для других распространенных форм, например для отчетов о расходах и запросов на подписку. Также с его помощью можно повысить функциональность сценариев. Например, можно совместить автоматическое создание счетов с доступом к базе данных, так что сценарий станет автоматически возвращать следующий сводный номер счета. Или можно сделать так, чтобы сценарий добавлял запись в базу данных для слежения за счетом. Для этого можно расширить сценарий CreateInvoice.vbs кодом на основе ADO, который запрашивает базу данных о последнем номере счета и выполняет запрос INSERT для добавления новой записи.

Дино Эспозито — Работает в Риме преподавателем и консультантом. С ним можно связаться по адресу: dinoe@wintellect.com


Листинг 1. Код, открывающий существующий документ
Dim doc1, doc2
Set doc1 = _
word.Documents.Add(invoice.doc)
Set doc2 = _
word.Documents.Add(expenses.doc)

VBScript Scripting Techniques > OLE Automation > MS Word

  1. SaveAs: convert MS Word documents to HTML
  2. SaveAs: convert MS Word documents to PDF
  3. SaveAs: convert MS Word documents to RTF
  4. SaveAs: convert MS Word documents to XPS
  5. CapsLock: use MS Word or WordPerfect to check the CapsLock status
SaveAs
Use MS Word to convert Word documents to HTML
VBScript Code:
Option Explicit

Doc2HTML «C:Documents and SettingsMyUserIDMy Documentsresume.doc»

Sub Doc2HTML( myFile )
‘ This subroutine opens a Word document,
‘ then saves it as HTML, and closes Word.
‘ If the HTML file exists, it is overwritten.
‘ If Word was already active, the subroutine
‘ will leave the other document(s) alone and
‘ close only its «own» document.

‘ Written by Rob van der Woude
‘ http://www.robvanderwoude.com
    ‘ Standard housekeeping
    Dim objDoc, objFile, objFSO, objWord, strFile, strHTML

    Const wdFormatDocument                    =  0
    Const wdFormatDocument97                  =  0
    Const wdFormatDocumentDefault             = 16
    Const wdFormatDOSText                     =  4
    Const wdFormatDOSTextLineBreaks           =  5
    Const wdFormatEncodedText                 =  7
    Const wdFormatFilteredHTML                = 10
    Const wdFormatFlatXML                     = 19
    Const wdFormatFlatXMLMacroEnabled         = 20
    Const wdFormatFlatXMLTemplate             = 21
    Const wdFormatFlatXMLTemplateMacroEnabled = 22
    Const wdFormatHTML                        =  8
    Const wdFormatPDF                         = 17
    Const wdFormatRTF                         =  6
    Const wdFormatTemplate                    =  1
    Const wdFormatTemplate97                  =  1
    Const wdFormatText                        =  2
    Const wdFormatTextLineBreaks              =  3
    Const wdFormatUnicodeText                 =  7
    Const wdFormatWebArchive                  =  9
    Const wdFormatXML                         = 11
    Const wdFormatXMLDocument                 = 12
    Const wdFormatXMLDocumentMacroEnabled     = 13
    Const wdFormatXMLTemplate                 = 14
    Const wdFormatXMLTemplateMacroEnabled     = 15
    Const wdFormatXPS                         = 18
    Const wdFormatOfficeDocumentTemplate      = 23 (1)
    Const wdFormatMediaWiki                   = 24(1) (2)

    ‘ Create a File System object
    Set objFSO = CreateObject( «Scripting.FileSystemObject» )

    ‘ Create a Word object
    Set objWord = CreateObject( «Word.Application» )

    With objWord
        ‘ True: make Word visible; False: invisible
        .Visible = True

        ‘ Check if the Word document exists
        If objFSO.FileExists( myFile ) Then
            Set objFile = objFSO.GetFile( myFile )
            strFile = objFile.Path
        Else
            WScript.Echo «FILE OPEN ERROR: The file does not exist» & vbCrLf
            ‘ Close Word
            .Quit
            Exit Sub
        End If
        ‘ Build the fully qualified HTML file name
        strHTML = objFSO.BuildPath( objFile.ParentFolder, _
                  objFSO.GetBaseName( objFile ) & «.html» )

        ‘ Open the Word document
        .Documents.Open strFile

        ‘ Make the opened file the active document
        Set objDoc = .ActiveDocument

        ‘ Save as HTML
        objDoc.SaveAs strHTML, wdFormatFilteredHTML

        ‘ Close the active document
        objDoc.Close

        ‘ Close Word
        .Quit
    End With
End Sub

Requirements:
Windows version: any
Network: any
Client software: MS Word
Script Engine: any
Summarized: Works in any Windows version, as long as MS Word is installed.
 
[Back to the top of this page]
 
SaveAs
Use MS Word to convert Word documents to PDF
VBScript Code:
Option Explicit

Doc2PDF «C:Documents and SettingsMyUserIDMy Documentsresume.doc»

Sub Doc2PDF( myFile )
‘ This subroutine opens a Word document, then saves it as PDF, and closes Word.
‘ If the PDF file exists, it is overwritten.
‘ If Word was already active, the subroutine will leave the other document(s)
‘ alone and close only its «own» document.

‘ Requirements:
‘ This script requires the «Microsoft Save as PDF or XPS Add-in for 2007
‘ Microsoft Office programs», available at:
‘ http://www.microsoft.com/downloads/details.aspx?
‘        familyid=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en

‘ Written by Rob van der Woude
‘ http://www.robvanderwoude.com

    ‘ Standard housekeeping
    Dim objDoc, objFile, objFSO, objWord, strFile, strPDF

    Const wdFormatDocument                    =  0
    Const wdFormatDocument97                  =  0
    Const wdFormatDocumentDefault             = 16
    Const wdFormatDOSText                     =  4
    Const wdFormatDOSTextLineBreaks           =  5
    Const wdFormatEncodedText                 =  7
    Const wdFormatFilteredHTML                = 10
    Const wdFormatFlatXML                     = 19
    Const wdFormatFlatXMLMacroEnabled         = 20
    Const wdFormatFlatXMLTemplate             = 21
    Const wdFormatFlatXMLTemplateMacroEnabled = 22
    Const wdFormatHTML                        =  8
    Const wdFormatPDF                         = 17
    Const wdFormatRTF                         =  6
    Const wdFormatTemplate                    =  1
    Const wdFormatTemplate97                  =  1
    Const wdFormatText                        =  2
    Const wdFormatTextLineBreaks              =  3
    Const wdFormatUnicodeText                 =  7
    Const wdFormatWebArchive                  =  9
    Const wdFormatXML                         = 11
    Const wdFormatXMLDocument                 = 12
    Const wdFormatXMLDocumentMacroEnabled     = 13
    Const wdFormatXMLTemplate                 = 14
    Const wdFormatXMLTemplateMacroEnabled     = 15
    Const wdFormatXPS                         = 18
    Const wdFormatOfficeDocumentTemplate      = 23 (1)
    Const wdFormatMediaWiki                   = 24 (1) (2)

    ‘ Create a File System object
    Set objFSO = CreateObject( «Scripting.FileSystemObject» )

    ‘ Create a Word object
    Set objWord = CreateObject( «Word.Application» )

    With objWord
        ‘ True: make Word visible; False: invisible
        .Visible = True

        ‘ Check if the Word document exists
        If objFSO.FileExists( myFile ) Then
            Set objFile = objFSO.GetFile( myFile )
            strFile = objFile.Path
        Else
            WScript.Echo «FILE OPEN ERROR: The file does not exist» & vbCrLf
            ‘ Close Word
            .Quit
            Exit Sub
        End If

        ‘ Build the fully qualified HTML file name
        strPDF = objFSO.BuildPath( objFile.ParentFolder, _
                 objFSO.GetBaseName( objFile ) & «.pdf» )

        ‘ Open the Word document
        .Documents.Open strFile

        ‘ Make the opened file the active document
        Set objDoc = .ActiveDocument

        ‘ Save as HTML
        objDoc.SaveAs strPDF, wdFormatPDF

        ‘ Close the active document
        objDoc.Close

        ‘ Close Word
        .Quit
    End With
End Sub

Requirements:
Windows version: any
Network: any
Client software: MS Word 2007 and the Microsoft Save as PDF or XPS Add-in for 2007 Microsoft Office programs
Script Engine: any
Summarized: Works in any Windows version, as long as MS Word 2007 and the Microsoft Save as PDF or XPS Add-in for 2007 Microsoft Office programs are installed.
 
[Back to the top of this page]
 
SaveAs
Use MS Word to convert Word documents to RTF
VBScript Code:
Option Explicit

Doc2RTF «C:Documents and SettingsMyUserIDMy Documentsresume.doc»

Sub Doc2RTF( myFile )
‘ This subroutine opens a Word document, then saves it as RTF, and closes Word.
‘ If the RTF file exists, it is overwritten.
‘ If Word was already active, the subroutine will leave the other document(s)
‘ alone and close only its «own» document.

‘ Written by Rob van der Woude
‘ http://www.robvanderwoude.com

    ‘ Standard housekeeping
    Dim objDoc, objFile, objFSO, objWord, strFile, strRTF

    Const wdFormatDocument                    =  0
    Const wdFormatDocument97                  =  0
    Const wdFormatDocumentDefault             = 16
    Const wdFormatDOSText                     =  4
    Const wdFormatDOSTextLineBreaks           =  5
    Const wdFormatEncodedText                 =  7
    Const wdFormatFilteredHTML                = 10
    Const wdFormatFlatXML                     = 19
    Const wdFormatFlatXMLMacroEnabled         = 20
    Const wdFormatFlatXMLTemplate             = 21
    Const wdFormatFlatXMLTemplateMacroEnabled = 22
    Const wdFormatHTML                        =  8
    Const wdFormatPDF                         = 17
    Const wdFormatRTF                         =  6
    Const wdFormatTemplate                    =  1
    Const wdFormatTemplate97                  =  1
    Const wdFormatText                        =  2
    Const wdFormatTextLineBreaks              =  3
    Const wdFormatUnicodeText                 =  7
    Const wdFormatWebArchive                  =  9
    Const wdFormatXML                         = 11
    Const wdFormatXMLDocument                 = 12
    Const wdFormatXMLDocumentMacroEnabled     = 13
    Const wdFormatXMLTemplate                 = 14
    Const wdFormatXMLTemplateMacroEnabled     = 15
    Const wdFormatXPS                         = 18
    Const wdFormatOfficeDocumentTemplate      = 23 (1)
    Const wdFormatMediaWiki                   = 24 (1) (2)

    ‘ Create a File System object
    Set objFSO = CreateObject( «Scripting.FileSystemObject» )

    ‘ Create a Word object
    Set objWord = CreateObject( «Word.Application» )

    With objWord
        ‘ True: make Word visible; False: invisible
        .Visible = True

        ‘ Check if the Word document exists
        If objFSO.FileExists( myFile ) Then
            Set objFile = objFSO.GetFile( myFile )
            strFile = objFile.Path
        Else
            WScript.Echo «FILE OPEN ERROR: The file does not exist» & vbCrLf
            ‘ Close Word
            .Quit
            Exit Sub
        End If

        ‘ Build the fully qualified HTML file name
        strRTF = objFSO.BuildPath( objFile.ParentFolder, _
                 objFSO.GetBaseName( objFile ) & «.rtf» )

        ‘ Open the Word document
        .Documents.Open strFile

        ‘ Make the opened file the active document
        Set objDoc = .ActiveDocument

        ‘ Save as HTML
        objDoc.SaveAs strRTF, wdFormatRTF

        ‘ Close the active document
        objDoc.Close

        ‘ Close Word
        .Quit
    End With
End Sub

Requirements:
Windows version: any
Network: any
Client software: MS Word
Script Engine: any
Summarized: Works in any Windows version, as long as MS Word is installed.
 
[Back to the top of this page]
 
SaveAs
Use MS Word to convert Word documents to XPS (XML PaperSpecification)
VBScript Code:
Option Explicit

Doc2XPS «C:Documents and SettingsMyUserIDMy Documentsresume.doc»

Sub Doc2XPS( myFile )
‘ This subroutine opens a Word document, then saves it as XPS, and closes Word.
‘ If the XPS file exists, it is overwritten.
‘ If Word was already active, the subroutine will leave the other document(s)
‘ alone and close only its «own» document.

‘ Requirements:
‘ This script requires the «Microsoft Save as PDF or XPS Add-in for 2007
‘ Microsoft Office programs», available at:
‘ http://www.microsoft.com/downloads/details.aspx?
‘        familyid=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en

‘ Written by Rob van der Woude
‘ http://www.robvanderwoude.com

    ‘ Standard housekeeping
    Dim objDoc, objFile, objFSO, objWord, strFile, strXPS

    Const wdFormatDocument                    =  0
    Const wdFormatDocument97                  =  0
    Const wdFormatDocumentDefault             = 16
    Const wdFormatDOSText                     =  4
    Const wdFormatDOSTextLineBreaks           =  5
    Const wdFormatEncodedText                 =  7
    Const wdFormatFilteredHTML                = 10
    Const wdFormatFlatXML                     = 19
    Const wdFormatFlatXMLMacroEnabled         = 20
    Const wdFormatFlatXMLTemplate             = 21
    Const wdFormatFlatXMLTemplateMacroEnabled = 22
    Const wdFormatHTML                        =  8
    Const wdFormatPDF                         = 17
    Const wdFormatRTF                         =  6
    Const wdFormatTemplate                    =  1
    Const wdFormatTemplate97                  =  1
    Const wdFormatText                        =  2
    Const wdFormatTextLineBreaks              =  3
    Const wdFormatUnicodeText                 =  7
    Const wdFormatWebArchive                  =  9
    Const wdFormatXML                         = 11
    Const wdFormatXMLDocument                 = 12
    Const wdFormatXMLDocumentMacroEnabled     = 13
    Const wdFormatXMLTemplate                 = 14
    Const wdFormatXMLTemplateMacroEnabled     = 15
    Const wdFormatXPS                         = 18
    Const wdFormatOfficeDocumentTemplate      = 23 (1)
    Const wdFormatMediaWiki                   = 24 (1) (2)

    ‘ Create a File System object
    Set objFSO = CreateObject( «Scripting.FileSystemObject» )

    ‘ Create a Word object
    Set objWord = CreateObject( «Word.Application» )

    With objWord
        ‘ True: make Word visible; False: invisible
        .Visible = True

        ‘ Check if the Word document exists
        If objFSO.FileExists( myFile ) Then
            Set objFile = objFSO.GetFile( myFile )
            strFile = objFile.Path
        Else
            WScript.Echo «FILE OPEN ERROR: The file does not exist» & vbCrLf
            ‘ Close Word
            .Quit
            Exit Sub
        End If

        ‘ Build the fully qualified XPS file name
        strXPS = objFSO.BuildPath( objFile.ParentFolder, _
                  objFSO.GetBaseName( objFile ) & «.xps» )

        ‘ Open the Word document
        .Documents.Open strFile

        ‘ Make the opened file the active document
        Set objDoc = .ActiveDocument

        ‘ Save in XML Paper Specification (XPS) format
        objDoc.SaveAs strXPS, wdFormatXPS

        ‘ Close the active document
        objDoc.Close

        ‘ Close Word
        .Quit
    End With
End Sub

Requirements:
Windows version: any
Network: any
Client software: MS Word 2007 and the Microsoft Save as PDF or XPS Add-in for 2007 Microsoft Office programs
Script Engine: any
Summarized: Works in any Windows version, as long as MS Word 2007 and the Microsoft Save as PDF or XPS Add-in for 2007 Microsoft Office programs are installed.
 
[Back to the top of this page]

This demo script can be downloaded here.
The downloadable version also contains other file filter constants.

Наконец то я смогу написать статью с примерами. Дело в том, что ключевым компонентом объектной модели Word является не сам объект Word.Application, а коллекция Documents, так как именно она предоставляет два ключевых метода – для создания и открытия документа Word. Конечно, у коллекции Word Documents есть и другие методы и свойства, но они не столь важны. И поэтому, мы рассмотрим только самые основные.

Сама по себе коллекция Documents хранит в себе набор всех объектов Document, которые в свою очередь позволяют работать с каждым экземпляром документа в отдельности. Я буду приводить примеры как в самом редакторе VBA, как и с помощью сценариев Windows Scrip Host.

Единственно свойство, которое позволяет узнать общее количество элементов коллекции является Count:

Count – содержит количество открытых в данный момент документов.

Для примера, откройте несколько word документов и в редакторе VBA пропишите следующий код (просто создайте новый модуль):

For Each objDoc In Documents
    DocName = DocName & objDoc.Name & vbCrLf
Next
MsgBox DocName
 
DocName = ""
 
For j = 1 To Documents.Count
    DocName = DocName & Documents.Item(j).Name & vbCrLf
Next
 
MsgBox DocName

В данном случае мы использовали два способа бля работы с коллекцией:

  • Использовали цикл for each для обработки коллекции
  • Использовали свойство count для определения количества элементов в коллекции Documents.

Оба способа позволяют получить имена всех документов открытых в данный момент.

Однако, если мы попробуем проделать аналогичный фокус в сценарии Windows script Host, то никакого результата не получим:

' -----------------------------------------------------
' Получение имени открытых документов
' documents-count.vbs
' -----------------------------------------------------
Option Explicit
 
dim objWord, objDoc, oDoc, DocName
 
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents
 
For Each oDoc In objDoc
    DocName = DocName & oDoc.Name & vbCrLf
Next
 
MsgBox DocName
objWord.Quit
// ------------------------------------------------
// Получение имени открытых документов
// documents-count.js
// ------------------------------------------------
 
var objWord, objDoc, oDoc, DocName;
 
objWord = WScript.CreateObject("Word.Application");
objDoc = new Enumerator(objWord.Documents);
 
for (; !objDoc.atEnd(); objDoc.moveNext()){
    DocName += objDoc.item().Name+ "n";
}
 
WScript.Echo(DocName);
objWord.Quit();

Видимо из внешнего сценария мы можем обработать только ту коллекцию, которую создали тут же.

Методы коллекции Word Documents

Хорошо, теперь давайте рассмотрим некоторые методы коллекции Word Documents, один из методов мы уже использовали выше (Item).

Add(Template, NewTemplate, DocumentType, Visible) – отвечает за создание нового документа, который сразу же открывается, можно выполнить метод без параметров. Параметры:

  • Template – задает шаблон для нового документа
  • NewTemplate – определяет, сделать ли новый документ шаблоном (TRUE) или нет (FALSE)
  • DocumentType – позволяет задать тип создаваемого документа, возможные значения: wdNewBlankDocument, wdNewEmailMessage, wdNewFrameset или wdNewWebPage (новый чистый документ, значение по умолчанию).
  • Visible – видимость нового документа (TRUE или FALSE).

При отсутствии параметров, будет создан чистый документ на основе шаблона Normal.dot.

Обратите внимание, что свойство Visible есть и у объекта Word Application, там оно позволяет показать или скрыть все экземпляры объекта Application.

Ниже привожу пример, сценария, в котором создается пять документов, выводится их количество и далее они закрываются:

' --------------------------------------------
' Создание документов word
' Application Documents Word
' documents-add-word.
' --------------------------------------------
Option Explicit
 
dim objWord, objDoc, i
 
' Создаем ссылку на объект Word.Application
Set objWord = CreateObject("Word.Application")
' Создаем ссылку на объект Documents
Set objDoc = objWord.Documents
' Делаем видимым приложение Word
objWord.Visible = True
 
' Создаем пять документов
for i=1 to 5
     objDoc.Add
Next
 
' Выводим количество созданных документов
MsgBox "Количество документов " & objDoc.Count
 
'Закрываем все документы Word
objWord.Quit
// --------------------------------------------
// Создание документов word
// Application Documents Word
// documents-add-word.js
// --------------------------------------------
 
var objWord, objDoc, i;
 
// Создаем ссылку на объект Word.Application
objWord = WScript.CreateObject("Word.Application");
// Создаем ссылку на объект Documents
objDoc = objWord.Documents;
// Делаем видимым приложение Word
objWord.Visible = true;
 
// Создаем пять документов
for (i=1; i<=5; i++){
     objDoc.Add();
}
 
// Выводим количество созданных документов
WScript.Echo ("Количество документов " + objDoc.Count);
 
//Закрываем все документы Word
objWord.Quit()

Item(index) переход к заданному элементу коллекции по его индексу. Значение индекса можно задавать как через метод, так и через коллекцию, так как метод Item используется по умолчанию. Следующие две строки кода являются эквивалентными:

Application.Documents(3)
Application.Documents.Item(3)
' -------------------------------------------
' Обработка коллекции документов
' Application Documents Word
' documents-count-word.vbs
' -------------------------------------------
Option Explicit
 
dim objWord, objDoc, i, j, objInfo
' вызываем процедуру CreateDoc
Call CreateDoc
 
objInfo = "Имя:" & vbCrLf
 
' Начинаем перебор коллекции Documents
for j=1 to objDoc.Count
     objInfo = objInfo & objDoc.Item(j).Name & vbCrLf
Next
 
' Выводим имена созданных документов
MsgBox objInfo
 
'Закрываем все документы Word
objWord.Quit
 
Sub CreateDoc
     Set objWord = CreateObject("Word.Application")
     Set objDoc = objWord.Documents
     objWord.Visible = True
 
     for i=1 to 5
                 objDoc.Add
     Next
End Sub
// -----------------------------------------
// Обработка коллекции документов
// Application Documents Word
// documents-count-word.js
// -----------------------------------------
 
var objWord, objDoc, i, j, objInfo
CreateDoc()
objInfo = "Имя:n";
 
// Начинаем перебор коллекции Documents
for (j=1; j<=objDoc.Count; j++){
     objInfo += objDoc.Item(j).Name + "n";
}
 
// Выводим имена созданных документов
WScript.Echo(objInfo);
 
//Закрываем все документы Word
objWord.Quit()
 
function CreateDoc(){
     objWord = WScript.CreateObject("Word.Application");
     objDoc = objWord.Documents;
     objWord.Visible = true;
 
     for (i=1; i<=5; i++){
                 objDoc.Add();
     }
}

Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format) – открыть заданный документ

  • FileName – только этот параметр является обязательным, содержит путь к файлу, если надо открыть несколько документов, то имена разделяются пробелами.
  • ConfirmConversions – содержит логическое значение, определяющее, надо ли отображать (TRUE) или нет (FALSE) отображать диалоговое окно Convert File, если документ записан не в формате Word.
  • ReadOnly – определяет, открывать ли документ только для чтения (значение TRUE).
  • AddToRecentFiles – если значение TRUE, то документ добавляется к списку файлов внизу меню Файл.
  • PasswordDocument, PasswordTemplate – пароль к документу или пароль к шаблону, соответственно. Application Documents Word.
  • Revert – если данный параметр содержит значение TRUE, то при попытке открыть уже открытый документ, сделанные в нем изменения не будут сохраняться. Если значение FALSE – произойдет простая активизация документа.
  • WritePasswordDocument – пароль, который запрашивается при сохранении документа.
  • WritePasswordTemplate — пароль, который запрашивается при сохранении шаблона.
  • Format – параметр содержит параметр для преобразования файла. Значения: wdOpenFormatAuto (по умолчанию), wdOpenFormatDocument, wdOpenFormatRTF, wdOpenFormatTemplate, wdOpenFormatText, wdOpenFormatUnicodeText.

Save() и Close() – сохранение и закрытие (соответственно) всех документов в заданной коллекции.

‘Create a word Document
Set objWord = CreateObject(«Word.Application»)
objWord.Visible = True

‘Documents collection includes all of the open documents.
Add method is used to create a blank document.
Document object returned by Add method is assigned to a variable, objDoc.
Set objDoc = objWord.Documents.Add()

‘Open a word Document file
Set wrd = CreateObject(«Word.Application»)
wrd.Visible = True

‘To open an existing document, use the Open method with the Documents collection.
‘The following instruction opens a document «Temp.doc» located in the folder «D:»

wrd.Documents.Open «D:Temp.doc»
Set wrd.Nothing

‘Writting a Text in Word Application
Set oWord = CreateObject(«Word.Application»)
oWord.Visible = True
Set oDoc = oWord.Documents.Add()
Set oSelection = oWord.Selection

‘Selection property represents selected area in a document or an insertion point
oSelection.TypeText = «Sample Text»

‘Formatting the text in the word document
Set oWord = CreateObject(«Word.Application»)
oWord.Visible = True
Set oDoc = oWord.Documents.Add()
Set oSelection = oWord.Selection
‘Setting the Font Name
oSelection.Font.Name = «Arial»
‘Setting the Font Size
oSelection.Font.Size = «20»
‘Setting the type face to Bold
oSelection.Font.Bold = True
oSelection. ParagraphFont.Alignment = 1
‘0 — Aligns text to Left, 1- Aligns text to center
‘2 — Aligns text to Right, 3 — Justify the text
oSelection.TypeText = «Add your text here»

‘Replacing a Word in Word Document
Set oWord = CreateObject(«Word.Application»)
Set oDoc = oWord.documents.Open(«C:WordDocument.docx»)
Set oWords = oDoc.Words
For word = 1 to oWords.Count
oWords.Item(word).Text = Replace(oWords.Item(word).Text, «sample»,»New word»)
Next
oDoc.Save
oDoc.Close
oWord.Quit
Set oDoc = Nothing
Set oWords = Nothing
Set oWord = Nothing

‘Saving the Word Document

To save a single doucument use the Save method with the Document object. The following insturction saves the document named «Sales.doc»

Documents(«Sales.doc»)Save

You can save all open documents by applying Save method to the Documents collection. The following instruction saves all open documents.

Documents.Save

‘To save to a new location use «SaveAs» else use «Save» method to save it on default location
oDoc.SaveAs(«c:MyDoc.doc»)

‘Closing the Word Document
oWord.Quit

‘Working with Tables
Set oWord = CreateObject(«Word.Application»)
oWord.visible = True
Set oDoc = oWord.Documents.Add()
Set oRange = oDoc.Range()
oDoc.Tables.Add oRange,3,3
Set oTable = oDoc.Tables(1)
For Row = 1 to 3
For Column = 1 to 3
oTable.Cell(Row,Column).Range.Text = Row&» Row, «&Column&» Column»
Next
Next
‘Make the First Row Data to Bold
oTable.Rows.Item(1).Range.Font.Bold = True
‘Makes the First Row Data to Italic
oTable.Rows.Item(1).Range.Font.Italic = True
‘Changes the font size
oTable.Rows.Item(1).Range.Font.Size = 12
‘Sets the width of the Column
oTable.Columns.Item(1).SetWidth 100,0

‘Open and Append Text to a Document
Dim oWord
Set oWord = CreateObject(«Word.Application»)
oWord.Documents.Open «c:text.doc»
oWord.Selection.TypeText «Text which is appended to existing document»
oWord.ActiveDocument.Save
oWord.Quit
Set oWord = Nothing

Selection property by default appends the text at the beginning only. To put the statements for selection at the end before entering the text, use the below cose.

Dim oWord
Set oWord = CreateObject(«Word.Application»)
oWord.Documents.Open «c:text.doc»
oWord.Selection.EndKey 6,0
oWord.Selection.TypeText «Text which is appended to existing document»
oWord.ActiveDocument.Save
oWord.Quit
Set oWord = Nothing

‘EndKey method moves the selection to the specified unit.
‘Two parameters are unit and Extend. We have used 6 for unit
‘which is to move at the end of story & 0 as extend which is to move the selection.
‘If you don’t specify these parameters, selection moves to the end of line.

‘Prints the word document
Dim oWord
Set oWord = CreateObject(«Word.Application»)
oWord.Documents.Open «c:test.docx»
oWord.Activedocument.PrintOut
oWord.Quit
Set oWord = Nothing

Понравилась статья? Поделить с друзьями:
  • Vbs open excel file
  • Vbs excel save as
  • Vbs createobject excel application
  • Vbnewline in excel vba
  • Vbe6ext olb could not be loaded что делать excel