Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

2006 г.

Word и его объекты
Лекция из курса «Основы офисного программирования и документы Word»

Биллиг Владимир Арнольдович
Интернет-Университет Информационных Технологий, INTUIT.ru

Назад Оглавление Вперёд

Работа с документами и класс Document

Вспомним, что мы уже знаем о документах Word. Когда открывается приложение, создается коллекция документов Documents, содержащая открытые документы. Если приложение Word создается в момент открытия документа Word, (заметим, что объект Word.Application может быть создан и в программном проекте другого приложения, например, Excel), то в начальный момент коллекция содержит минимум один новый или ранее существовавший документ. Программно новый документ добавляется в коллекцию методом Add, а уже существующий - методом Open объекта Documents. Чтобы добраться до нужного документа в коллекции, достаточно указать его индекс - имя файла, хранящего документ, - или его порядковый номер в коллекции. Для той же цели можно использовать и метод Item, но обычно он опускается. Метод Save позволяет сохранить документ, а метод Close, сохраняя документ в файле, закрывает его и удаляет из коллекции.

При применении метода Open обязательно указывать имя, а точнее путь к открываемому файлу. Однако задание конкретного пути всегда чревато неприятностями, поскольку при любом переносе системы местоположение файла может измениться. В одной из предыдущих процедур этой лекции WorkWithSearch я демонстрировал возможность использования свойства Path для нахождения пути к документу. Часто предпочтительнее предоставить пользователю возможность выбирать открываемый файл, хранящий документ. Для этого, конечно, можно использовать объект Dialog, при вызове методов которого открывается соответствующее диалоговое окно.

Вот еще один пример использования уже знакомого нам объекта Dialog FileOpen:

Public Sub WorkWithDialogs()
Dim dlg As Dialog
   'Открытие документа в диалоге с пользователем
   'Метод  Show ведет диалог и открывает документ
   Dialogs(wdDialogFileOpen). Show

   'Метод  Display ведет диалог, не открывая документа,
   'но позволяя получить имя файла.
   Set dlg = Dialogs (wdDialogFileOpen)
   If dlg. Display = -1 Then 'нажата кнопка Open
      Documents.Open FileName:=dlg.Name
   End If
End Sub

Листинг 1: html, txt

Теперь подробнее рассмотрим свойства и методы документа - объекта класса Document. Это основной объект, свойства, события и методы которого следует знать основательно. Объект Document не менее сложен, чем объект Application.

Коллекции объекта Document

Рассмотрим список коллекций, входящих в состав объекта Document:

  1. Bookmarks
  2. Characters (Range)
  3. CommandBars
  4. Comments
  5. DocumentProperties
  6. Endnotes
  7. Fields
  8. Footnotes
  9. FormFields
  10. Frames
  11. Hyperlinks
  12. Indexes
  13. InlineShapes
    • HorizontalLineFormat
  14. ListParagraphs
  15. Lists
    • ListParagraphs
    • Range
  16. ListTemplates
    • ListLevels
    • Font
  17. Paragraphs
  18. ProofreadingErrors (Range)
  19. Revisions
  20. ReadabilityStatistics
  21. Scripts
  22. Sections
  23. Sentences (Range)
  24. Shapes
  25. StoryRanges (Range
  26. Styles
  27. Subdocuments
  28. Tables
  29. TablesOfAuthoritiesCategories (TableOfAuthoritiesCategory)
  30. TablesOfAuthorities (TableOfAuthorities)
  31. TablesOfContents (TableOfContents)
  32. TablesOfFigures (TableOfFigures)
  33. Variables
  34. Versions
  35. Windows
  36. Words (Range)

Среди объектов, вложенных в объект Document на первом уровне иерархии, коллекции составляют явное большинство - их 36. Каждая коллекция содержит элементы одного класса. Как правило, имя класса коллекции строится как множественное число (по правилам английского языка) от имени класса элемента коллекции. Например, коллекция Documents содержит объекты класса Document, а коллекция Paragraphs содержит объекты класса Paragraph. В тех случаях, когда это правило не выполняется, в скобках указано имя класса для объектов, входящих в коллекцию. Заметьте, например, что коллекции предложений, слов и символов документа Word состоят из объектов класса Range.

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

Простые объекты, вложенные в объект Document

Объектов, вложенных на верхнем уровне иерархии в объект Document, существующих в одном экземпляре и не имеющих соответственно коллекций, сравнительно немного. Вот их список:

  1. Email
    • EmailAuthor
  2. Envelope
  3. Frameset
  4. HTMLProject
  5. LetterContent
  6. MailMerge
    • MailMergeDataSource
    • MailMergeFields
  7. PageSetup
    • LineNumbering
    • TextColumns
  8. Range
  9. RoutingSlip
  10. VBProject
  11. WebOptions

В Office 2000 у объекта Document появились три новых объекта в сравнении с предыдущей версией. Это объекты: Email, Frameset и WebOptions.

Итак, только на верхнем уровне в объект Document встроено около 50 объектов, определяющих его свойства. Большинство из этих объектов устроены достаточно сложно, - почти все содержат коллекции внутри себя. Попробуем упорядочить эту "тьму" объектов.

Классы, задающие структуризацию текста документа

Текст - это основа большинства документов. Его можно структурировать, оперируя различными единицами при решении тех или иных задач преобразования текста. Минимальной единицей текста является символ. Другие естественные единицы - это слова, предложения, абзацы. Более крупными частями текста являются страницы, параграфы и главы. Важно уметь оперировать с последовательностями таких единиц. Какие же классы объектов предоставляет Word для этой цели?

Классы Characters, Words, Statements, Paragraphs позволяют работать с последовательностями (коллекциями) символов, слов, предложений, абзацев. Может показаться удивительным, но классов, соответствующих таким элементам, как символ, слово или предложение, нет. Элементом коллекций Characters, Words и Statements является объект класса Range. Это один из самых важных объектов, необходимых для понимания работы с текстами. Объект Range позволяет работать как с одним символом, так и с последовательностью символов. Документы, поддокументы, абзацы, разделы - все они имеют метод или свойство Range, возвращающее объект Range, представляющий область, связанную с объектом, вызвавшим метод (свойство) Range. Эту область можно рассматривать как интервал, задаваемый первым и последним символом текста данной области. Поэтому работа с текстом, так или иначе, ведется через методы и свойства объекта Range.

Чуть позже мы продолжим знакомство с классами Characters, Words, Statements, Paragraphs и Range.

Документ и его части

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

Разделы и поддокументы

Сейчас мы обсудим более подробно две коллекции Sections и SubDocuments, задающие разделы документа и поддокументы, входящие в состав основного документа. Почти в каждом текстовом документе можно встретить символы, слова, предложения и абзацы. Что же касается более крупных единиц текста, то в разных документах они называются по-разному. Чаще всего, приходится встречаться со страницами и листами документа, но используются и такие термины как параграфы, главы, части, разделы документа. В объектной модели Word, к сожалению, нет таких объектов как Page и Pages, соответствующих таким естественным единицам текстового документа как страницы документа и их коллекции. В документе Word следующей крупной единицей после абзаца является раздел - объект класса Section. Все разделы одного документа составляют коллекцию Sections.

Что же такое раздел, как и для чего он создается? Раздел в документе всегда можно создать руками, для чего достаточно вставить символ разрыва документа - Section break, вызвав пункт Break из меню Insert. Символ разрыва может быть разного типа, задавая следующую страницу, четную или нечетную страницу, столбец и другие виды раздела. Таким образом, можно руками разбить документ на страницы, вставляя подходящие символы разрыва в нужных местах. В этом случае разделы будут выступать в роли страниц документа. Иногда разделы создаются автоматически, например, при представлении некоторой части документа в виде нескольких столбцов. Часть документа, представленная в виде нескольких столбцов, представляет отдельный раздел.

При программной работе разделы можно создавать двояко, используя метод InsertBreak, которым обладают объекты Range и Selection, или вызывая метод Add коллекции Sections. Метод Add(Range, Start) имеет два параметра:

  • Range задает область, начинающую новый раздел, или, что тоже, область, перед началом которой будет вставлен символ разрыва.
  • Start задает тип символа разрыва.

Заметьте, в методе InsertBreak указывается только второй параметр, поскольку новый раздел начинается с объекта Range (Selection), вызвавшего метод.

Рассмотрим пример, в котором документ с именем DocThree, программно разбивается на разделы. Наше разбиение гарантирует, что соответствующие главы и параграфы документа находятся в отдельных разделах, что облегчает дальнейшую работу с ними. Вот как выглядит процедура, решающая эту задачу:

Листинг 1: html, txt

В этой процедуре показано, как происходит выделение раздела, подсчет некоторых характеристик раздела, например, подсчет числа абзацев, предложений и символов раздела. Показано, как создаются разделы документа, используя как метод InsertBreak так и метод Add коллекции Sections. Метод Add вызывается как с явно заданными параметрами, так и параметрами, задаваемыми по умолчанию.

Перейдем теперь к рассмотрению понятия поддокумент и способов работы с объектами, задающими поддокументы. Есть некоторый разумный предел размера одного документа. Если в документе больше 10-20 страниц, работать с ним становится неудобно. В этом случае в нем целесообразно выделить главный документ и поддокументы. Главный документ и поддокументы являются, по сути, документами, связанными ссылками, с каждым из которых можно работать независимо. Вот пример выделения поддокумента из главного документа:

Листинг 1: html, txt

Наш документ DocThree вначале не имел поддокументов. Этот документ предварительно разбивается на разделы, если это еще не было сделано, а затем в нем выделяется поддокумент, начиная с третьего раздела и кончая последним разделом документа. Метод AddFromRange класса SubDocuments создает поддокумент, выделяя из главного документа область, заданную параметром Range.

Заметьте, область, задаваемая параметром Range, должна начинаться с заголовка, имеющего один из стандартных стилей Heading. При сохранении документа, поддокумент удаляется из документа и сохраняется в отдельном файле. Имя файла строится автоматически, используя текст заголовка, начинающего поддокумент. В главном документе остается ссылка на поддокумент. При желании его всегда можно слить с главным, но с ним можно работать и как с независимым документом. Вот как выглядит наш главный документ после того, как в нем выделен поддокумент:

Главный документ с выделенным поддокументом
Рис. 1.9.  Главный документ с выделенным поддокументом

Назад Оглавление Вперёд

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...