Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3491 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 2:

Начнем с объектов Office 2000

Коллекции 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.

Приведем результаты отладочной печати (В данном примере испульзуюся документы 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. Кроме того, есть много свойств и методов, специфических для абзацев. Иногда, одной и той же цели можно добиться, вызывая метод или изменяя свойство. За подробностями отсылаем к документации.

полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.