Начнем с объектов Office 2000
Коллекции Word: Documents, Paragraphs и другие
Word позволяет одновременно работать с одним или несколькими документами. Документы и коллекция документов - это центральные понятия Word. Классы Document и Documents играют для Word ту же роль, что и классы WorkBook и WorkBooks для Excel. Документ Word организован довольно сложно. Текст - основа большинства документов - может быть дополнен рисунками и таблицами, с ним могут быть связаны комментарии и исправления, сноски и колонтитулы и т. д. Но об этом речь впереди, а пока чуть подробнее поговорим о тексте. Конечно, текст можно рассматривать как последовательность символов, его составляющих. Но ведь куда как часто мы оперируем с более крупными единицами! Word использует привычные понятия: символы, слова, предложения, абзацы, разделы.
Существуют понятия - существуют и классы, соответствующие этим понятиям. Объект Application. Word, представляющий приложение Word, имеет свойство (встроенный объект) Documents. При обращении к свойству возвращается объект класса Documents - коллекция всех открытых документов. Элемент коллекции - документ - это объект класса Document.
Объект Document, представляющий один документ, имеет свойства:
Конечно, это лишь часть многочисленных свойств, связанных с текстом документа. Заметьте: данными свойствами обладает не только сам документ. Ими обладают и объекты 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 Sub1.5.
Приведем результаты отладочной печати (В данном примере испульзуюся документы 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. При удалении элемента происходит перенумерация индексов, поэтому удаляется второй и четвертый элемент коллекции при последовательном выполнении методов Item(2). Close, Item(3).Close.
Коллекция Paragraphs
Свойство Paragraphs, возвращающее коллекцию абзацев, имеют объекты класса Documents, Selection, Range. Абзац - это не только последовательность символов, но и структурно выделенная единица текста, характеризуемая параметрами: отступом или выступом по отношению к границам листа документа, межстрочными интервалами, расположением первой строки, стилем и пр. Конечно, все эти характеристики связаны в первую очередь с самим объектом, точнее с классом Paragraph. Но, как это часто бывает в Office 2000, свойства и методы объекта включаются и в коллекцию, содержащую эти объекты. В какой-то мере происходит наследование снизу вверх.
У коллекции Paragraphs два метода, типичные для всех коллекций: Item и Add. Первый, как всегда, определяет элемент коллекции, заданный параметром Index. Абзацы не имеют имен, и индекс всегда задает порядковый номер элемента. Нумерация абзацев в коллекции начинается с 1. Метод Add используется для добавления нового пустого абзаца. Его синтаксис:
Add(Range)
Необязательный параметр Range указывает точку вставки, - абзац вставляется перед той частью текста, которую задает объект Range. Если параметр опущен, абзац вставляется в конец документа или после объекта Selection и Range, если они вызвали метод Add.
Для вставки пустого абзаца чаще всего применяются методы объектов Range и Selection: InsertParagraph, InsertParagraphAfter, InsertParagraphBefore. Они не имеют параметров. Новый абзац заменяет текст или вставляется после или перед частью текста, заданного объектом Range или Selection, вызвавшего соответствующий метод.
Предупреждение:
Осторожнее с методом InsertParagraph: он заменяет весь имеющийся текст новым, пустым абзацем!
Для вставки текста в созданный пустой (или непустой) абзац могут быть использованы методы объектов Range и Selection: InsertAfter и InsertBefore. Их единственный параметр - Text - задает текст, добавляемый в начало или в конец части текста, заданной объектами Range и Selection, после чего объекты расширяются, дабы включить добавленный текст. Для удаления абзацев может использоваться метод Delete объектов Range и Selection.
В коллекции Paragraphs много методов, "наследуемых" у объекта Paragraph. Чаще всего они применяются к отдельному абзацу, но иногда вызываются коллекцией, чтобы применить метод ко всем абзацам коллекции. Вот эти методы:
- OpenUp, CloseUp, OpenOrCloseUp - вставляют или удаляют фиксированное количество пробелов (12) перед абзацем. OpenOrCloseUp - переключатель: если есть пробелы, он их удаляет, нет - вставляет.
- Indent и Outdent - увеличивают и уменьшают отступ абзаца (или всех абзацев коллекции) от края листа.
- OutlineDemote, OutlinePromote и OutlineDemoteToBody - понижают и повышают уровень заголовка в интервале Heading1 : Heading8. При понижении последнего уровня -Heading 8 стиль заголовка меняется на стиль Normal.
- Reset - удаляет форматирование, сделанное вручную, применяя формат, заданный стилем абзаца.
- Space1, Space2, Space15 устанавливают в абзаце межстрочный интервал: одинарный, двойной или полуторный.
- TabHangingIndent(Count) и TabIndent(Count) изменяют выступ или отступ абзаца от края листа на заданное количество позиций, определенное параметром Count. Если значение этого параметра положительно, происходит увеличение, иначе - уменьшение отступа (выступа).
Коллекция Paragraphs имеет общие свойства Count, Parents, Creator и Application. Кроме того, есть много свойств и методов, специфических для абзацев. Иногда, одной и той же цели можно добиться, вызывая метод или изменяя свойство. За подробностями отсылаем к документации.