Коллекция Word Documents

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

Наконец то я смогу написать статью с примерами. Дело в том, что ключевым компонентом объектной модели 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() – сохранение и закрытие (соответственно) всех документов в заданной коллекции.

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