Коллекция Word Documents

Коллекция Word Documents Объектная модель Microsoft Word

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

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

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

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

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

ForEach objDoc In Documents    DocName = DocName & objDoc.Name & vbCrLfNextMsgBox DocName DocName = "" For j = 1 To Documents.Count    DocName = DocName & Documents.Item(j).Name & vbCrLfNext MsgBox DocName

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

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

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

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

' -----------------------------------------------------' Получение имени открытых документов' documents-count.vbs' -----------------------------------------------------OptionExplicit dim objWord, objDoc, oDoc, DocName Set objWord = CreateObject("Word.Application")Set objDoc = objWord.Documents ForEach oDoc In objDoc    DocName = DocName & oDoc.Name & vbCrLfNext MsgBox DocNameobjWord.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.' --------------------------------------------OptionExplicit dim objWord, objDoc, i ' Создаем ссылку на объект Word.ApplicationSet objWord = CreateObject("Word.Application")' Создаем ссылку на объект DocumentsSet objDoc = objWord.Documents' Делаем видимым приложение WordobjWord.Visible = True ' Создаем пять документовfor i=1 to 5     objDoc.AddNext ' Выводим количество созданных документовMsgBox "Количество документов " & objDoc.Count 'Закрываем все документы WordobjWord.Quit
// --------------------------------------------// Создание документов word// Application Documents Word// documents-add-word.js// -------------------------------------------- var objWord, objDoc, i; // Создаем ссылку на объект Word.ApplicationobjWord = WScript.CreateObject("Word.Application");// Создаем ссылку на объект DocumentsobjDoc = objWord.Documents;// Делаем видимым приложение WordobjWord.Visible=true; // Создаем пять документовfor(i=1; i<=5; i++){     objDoc.Add();} // Выводим количество созданных документовWScript.Echo("Количество документов "+ objDoc.Count); //Закрываем все документы WordobjWord.Quit()

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

Application.Documents(3)Application.Documents.Item(3)
' -------------------------------------------' Обработка коллекции документов' Application Documents Word' documents-count-word.vbs' -------------------------------------------OptionExplicit dim objWord, objDoc, i, j, objInfo' вызываем процедуру CreateDocCall CreateDoc objInfo = "Имя:" & vbCrLf ' Начинаем перебор коллекции Documentsfor j=1 to objDoc.Count     objInfo = objInfo & objDoc.Item(j).Name & vbCrLfNext ' Выводим имена созданных документовMsgBox objInfo 'Закрываем все документы WordobjWord.Quit Sub CreateDoc     Set objWord = CreateObject("Word.Application")     Set objDoc = objWord.Documents     objWord.Visible = True      for i=1 to 5                 objDoc.Add     NextEndSub
// -----------------------------------------// Обработка коллекции документов// Application Documents Word// documents-count-word.js// ----------------------------------------- var objWord, objDoc, i, j, objInfoCreateDoc()objInfo ="Имя:n"; // Начинаем перебор коллекции Documentsfor(j=1; j<=objDoc.Count; j++){     objInfo += objDoc.Item(j).Name+"n";} // Выводим имена созданных документовWScript.Echo(objInfo); //Закрываем все документы WordobjWord.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() – сохранение и закрытие (соответственно) всех документов в заданной коллекции.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий