Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 1....doc
Скачиваний:
59
Добавлен:
17.12.2018
Размер:
1.88 Mб
Скачать

Коллекции Word: Documents, Paragraphs и другие

Word позволяет одновременно работать с одним или несколькими документами. Документы и коллекция документов - это центральные понятия Word. Классы Document и Documents играют для Word ту же роль, что и классы WorkBook и WorkBooks для Excel. Документ Word организован довольно сложно. Текст - основа большинства документов - может быть дополнен рисунками и таблицами, с ним могут быть связаны комментарии и исправления, сноски и колонтитулы и т. д. Но об этом речь впереди, а пока чуть подробнее поговорим о тексте. Конечно, текст можно рассматривать как последовательность символов, его составляющих. Но ведь куда как часто мы оперируем с более крупными единицами! Word использует привычные понятия: символы, слова, предложения, абзацы, разделы.

Существуют понятия - существуют и классы, соответствующие этим понятиям. Объект Application. Word, представляющий приложение Word, имеет свойство (встроенный объект) Documents. При обращении к свойству возвращается объект класса Documents - коллекция всех открытых документов. Элемент коллекции - документ - это объект класса Document.

Объект Document, представляющий один документ, имеет свойства:

Свойство

Возвращает

Characters

объект класса Characters, представляющий коллекцию символов текста документа

Words

объект, представляющий коллекцию слов

Sentences

объект, представляющий коллекцию предложений

Paragraphs

объект, представляющий коллекцию абзацев

Sections

объект, представляющий коллекцию разделов или секций документа

ListParagraphs

объект, представляющий коллекцию списков, входящих в текст документа

Конечно, это лишь часть многочисленных свойств, связанных с текстом документа. Заметьте: данными свойствами обладает не только сам документ. Ими обладают и объекты Selection и Range, представляющие части документа. При этом возвращаемые объекты представляют соответствующие коллекции данной части документа.

Казалось бы, раз есть коллекции Characters или Words, то должны существовать и классы Character и Word, представляющие отдельный символ или отдельное слово. Но это не так. Элементами коллекций Characters, Sentences и Words являются объекты класса Range. Нет операций, отдельно определенных над символами, словами или предложениями, - они определены над интервалами, последовательностью символов, представляемых объектом Range. Ситуация здесь подобна Excel, где элементами коллекции Cells являются не ячейки, а все тот же объект Range.

Абзацу и разделу соответствуют свои классы объектов - Paragraph и Section соответственно. Но у нас сейчас разговор пойдет не о классах отдельных объектов, а о коллекциях. Мы начнем с коллекции документов.

Коллекция Documents

Коллекция Documents представляет все открытые документы Word. По своим свойствам и поведению она напоминает коллекцию WorkBooks, представляющую все открытые рабочие книги Excel. Поэтому мы будем часто ссылаться на уже описанные свойства и методы коллекции WorkBooks.

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

  • Add - добавляет новые пустые документы;

  • Open - открывает файл, содержащий существующий документ и автоматически добавляет его в коллекцию.

Метод Add имеет синтаксис:

Add(Template,NewTemplate)

Параметр Template, задающий шаблон открытия документа, является строкой с именем файла, хранящего шаблон. Параметр не является обязательным и, если он опущен, используется стандартный шаблон Normal (файл Normal. dot). Второй параметр (тоже необязательный) - NewTemplate - булевого типа; он равен True, если документ открывается, как шаблон. Так что коллекция Documents содержит не только документы, но и шаблоны.

У метода Open десять параметров. Обязательным является только первый - FileName; он задает имя файла, содержащего документ (шаблон). Остальные параметры определяют режимы открытия: пароль, статус файла, преобразование формата при открытии и т. п.

Документ удаляется из коллекции при его закрытии. Вне коллекции не может существовать открытый документ. Метод Close закрывает документ и одновременно удаляет его из коллекции. Его синтаксис:

Close(SaveChanges, OriginalFormat, RouteDocument)

Все параметры являются необязательными. Первый указывает действия, предпринимаемые при закрытии документа, и может быть одной из констант: wdSaveChanges, wdDoNotSaveChanges, wdPromptToSaveChanges. В зависимости от константы сделанные в документе изменения будут сохранены, проигнорированы или решение будет предоставлено пользователю в режиме диалога. По умолчанию изменения сохраняются при закрытии документа. Параметр OriginalFormat указывает формат сохранения документа и может быть одной из констант: wdWordDocument, wdOriginalFormat, wdPromptUser. В первом случае при сохранении используется формат документов Word, во втором - оригинальный формат документа - тот, что он имел при открытии; в последнем случае решение принимает пользователь в режиме диалога. По умолчанию предполагается формат документа Word. Третий параметр - булевого типа - равен True, если документ после закрытия направляется следующему пользователю, который принимает участие в работе над этим документом. Данный параметр имеет смысл лишь при коллективной работе над документом в сети. По умолчанию он равен False.

Метод Save позволяет сохранять документы (шаблоны) без закрытия и удаления из коллекции. Этот метод имеют как объекты класса Document, так и коллекции - объекты Documents. Если метод Save вызывает коллекция, то сохраняются все документы этой коллекции. При этом его синтаксис:

Save(NoPrompt, OriginalFormat)

Оба параметра необязательны. Если значение первого - True, Word автоматически сохраняет все документы, в противном случае возникнет диалог с пользователем о сохранении каждого из документов. Параметр OriginalFormat задает формат сохранения так же, как и в методе Close. У метода Save, используемого для сохранения отдельного документа, параметров нет. Если сохраняется новый документ, с которым еще не связано имя файла, его хранящего, будет вызвано диалоговое окно SaveAs, в котором пользователь задаст это имя и, если надо, путь.

Для получения доступа к элементу коллекции, как обычно, можно вызвать метод Item. Его единственный параметр Index задает порядковый номер или имя документа в коллекции. Item является методом по умолчанию, так что индекс можно непосредственно указывать у объекта, задающего коллекцию.

Класс Documents имеет типичные для коллекций свойства:

  • Application;

  • Count;

  • Creator;

  • Parent.

Эти свойства мы описали, когда речь шла о коллекции WorkBooks. Закончим рассмотрение этой коллекции примером:

Public Sub WorkWithDocuments()

'Работа с коллекцией документов

Dim N As Long, I As Byte

Dim PathDir As String

PathDir = "e:\O2000\CD2000\Ch1\"

With Documents

N = .Count

Debug.Print "Число документов в коллекции Documents " & _

"при открытии приложения Word = ", N

' Добавление 2-х новых документов (второй представляет шаблон)

.Add

.Add NewTemplate:=True

'Добавление двух существующих документов

.Open (PathDir & "DocThree")

.Open (PathDir & "DocFive")

N = .Count

Debug.Print "Число документов после 4-х вызовов методов " _

& "Add и Open =", N

Debug.Print "Имена документов в коллекции:"

For I = 1 To .Count

Debug.Print .Item(I).Name

Next

'Закрытие двух документов и, следовательно, удаление их из коллекции

.Item(2).Close

.Item(3).Close

N = .Count

Debug.Print "Число документов после двух вызовов " _

& "метода Close =", N

Debug.Print "Имена документов, оставшихся в коллекции:"

For I = 1 To .Count

Debug.Print .Item(I).Name

Next

End With

End Sub

Пример 1.5. (html, txt)

Приведем результаты отладочной печати (В данном примере испульзуюся документы Dex1, DocFive, DocThree:

Число документов в коллекции Documents при открытии приложения Word = 1

Число документов после 4-х вызовов методов Add и Open = 5

Имена документов в коллекции:

DocFive.doc

DocThree.doc

Template2

Document3

Dex1.dot

Число документов после двух вызовов метода Close = 3

Имена документов, оставшихся в коллекции:

DocFive.doc

Template2

Dex1.dot

Обратите внимание на то, что элементы добавляются в начало коллекции, а не в ее конец, как это было при добавлении элементов в коллекцию WorkBooks Excel. При удалении элемента происходит перенумерация индексов, поэтому удаляется второй и четвертый элемент коллекции при последовательном выполнении методов Ite(2). Close, Item(3).Close.