Объекты автоматизации поддерживают также и доступ к свойствам через специальным образом описанные методы.
Для разрушения структур данных, связанных с использованием СОМ-объекта в программе, следует присвоить ссылке на него значение Unassigned. Данная операция не закрывает запущенный сервер автоматизации:
Var
Object: Variant;
Object := CreateOleObject('Word.Application');
Object := Unassigned; // Разрушениепрограммныхструктур
2. ЭКСПОРТ ИНФОРМАЦИИ В MICROSOFTWORD
2.1 Структура приложения MicrosoftWord
Приложения, входящие в состав Microsoft Office, имеют иерархическую объектную структуру. Структура каждого приложения сложна и существенно отличается от структуры других приложений, что обусловлено различной направленностью самих приложений.Объекты иерархий Microsoft Office содержат в себе методы, количество которых приблизительно равно количеству действий, поддерживаемых при редактировании документов, поэтому их число очень велико. Иерархическая структура объектов отражает представление данных, редактируемых в том или ином приложении. Структура Microsoft Word включает в себя объект верхнего уровня Application, управляющий непосредственно приложением, и вложенные в него объекты типа Document, предоставляющие доступ к документам, открытым в данный момент. При добавлении очередного объекта Document сторонним приложением с помощью методов сервера автоматизации Microsoft Word открывает очередной документ. Аналогично объекты типа Document могут содержать в себе объекты типа Paragraph, представляющие собой ссылки на абзацы текста. Доступ к объектам различного уровня из программы-клиента, реализованной, например, на Delphi, осуществляется единообразно, через ссылки на вышестоящие в иерархии объекты. Объекты одного уровня и назначения, например, объекты типа Document, объединяются в одно свойство, так называемое семейство, которое имеет название типа объектов во множественном числе. Таким образом, объекты типа Document объединяются в свойство Documents.
Такие свойства являются, фактически списками, для которых можно определить количество элементов в каждом из них (свойство Count) и получить доступ к элементу с помощью функции Item, получающей в качестве параметра номер объекта в списке. Элементы нумеруются от единицы. Для передачи параметров в методы объектов автоматизации и присвоения значений их свойствам используется специальный тип данных OleVariant, основное отличие которого от типа Variant состоит в его совместимости с операционной системой, которая и поддерживает технологию СОМ. Итак, для экспорта информации в Microsoft Word с использованием сервера автоматизации следует:
1. Создать экземпляр сервера автоматизации «Word.Application» (запустить Word) или получить ссылку на уже запущенный экземпляр.
2. Создать новый документ.
3. Вывести информацию в созданный документ.
4. Разрушить структуры, связанные с экземпляром сервера автоматизации в программе, а также ссылки на элементы его объектной иерархии.
2.2 Запуск сервера
Создание или получение ссылки на экземпляр сервера автоматизации выполняется с помощью функций CreateOleObject или GetActiveOleObject соответственно. В некоторых случаях целесообразно сначала пытаться подключиться к существующему серверу, а в случае неудачи запустить собственную версию.
2.3 Взаимодействие с сервером на уровне документа
Для создания нового документа следует добавить элемент в семейство Documents объекта «Word.Application» с помощью функции Add, которая вернет ссылку на созданный документ:
Add(Template: String, NewTemplate: Boolean): Document;
Строковый параметр Template определяет, на основе какого шаблона должен быть создан новый документ, а параметр NewTemplate указывает на то, что создаваемый документ сам должен являться шаблоном. Если метод вызывается без параметров, то новый документ создается на основе шаблона Normal (обычный) и является обычным документом.
Ссылку на вновь созданный документ, возвращаемую методом Add, следует сохранить в переменной типа Variant для дальнейшего доступа к документу с целью вывода информации в него. При необходимости вывода информации в сложные формы новый документ можно создать на основе некоторого «шаблона» - ранее созданного и сохраненного документа. Параметры могут передаваться методу Add в обычной форме.
Закрыть документ после окончания вывода информации в него можно с помощью метода close.
2.4 Непосредственный вывод информации
Вывод информации в Microsoft Word аналогичен работе пользователя в редакторе и некоторым образом эмулирует ее. Так, с помощью объекта Selection, отражающего текущее выделение в документе, поддерживаются команды ввода текста и настройки его параметров. Если явного выделения не присутствует, то объект Selection отражает местонахождение текстового курсора. Заметим, что объект Selection принадлежит объекту «Word.Application», а не объекту Document. Для вывода информации в объект Selection используется его метод TypeText. Для ввода символа перевода строки можно воспользоваться методом TypeParagraph объекта Selection. При последовательном выводе информации изменение автоматически установленного выделения обычно не требуется, однако, если возникнет такая необходимость, можно установить параметры выделения с помощью методов Move, MoveRight (сместить выделение вправо) и MoveLeft (сместить выделение влево):
Move(Unit: Integer, Count: Integer);
MoveRight(Unit: Integer, -Count: Integer, Extend: Boolean = False);
MoveLeft(Unit: Integer, Count: Integer, Extend: Boolean = False);
Методы сдвигают выделение на заданное параметром Count количество единиц. Значение параметра может быть положительным, либо отрицательным. В случае метода Move знак параметра Count определяет направление смещения выделения. Отрицательное значение параметра указывает на смещение влево, а положительное – вправо. Методы MoveRight и MoveLeft изначально настроены на смещение выделения в заданную сторону (вправо и влево соответственно), поэтому отрицательное значение параметра Count в их вызове просто меняет направление смещения выделения. При использовании методов Move, MoveLeft и MoveRight, выделение, если оно существовало до их вызова, снимается. Этого можно избежать в функциях MoveLeft и MoveRight, если в качестве значения необязательного параметра Extend задать значение True (по умолчанию устанавливается False).
Параметр Unit определяет единицу смещения выделения. Некоторые его значения, указаны в таблице 1.
Таблица 1. – Некоторые значения параметра Unit.
Значение | Единица смещения выделения |
1 | Один символ |
2 | Одно слово |
3 | Одно предложение |
4 | Один абзац |
5 | Одна строка |
9 | Один столбец таблицы, если выделение находится в таблице |
10 | Одна строка таблицы, если выделение находится в таблице |
12 | Одна ячейка таблицы, если выделение находится в таблице |
И, наконец, чтобы просто сбросить выделение, не изменяя его начального положения, можно воспользоваться методом Collapse объекта Selection.
2.5 Форматирование текстовой информации
Для форматирования текущего выделения, через объект Selection можно получить доступ к объекту Font, определяющему характеристики шрифта данного выделения. Основные свойства объекта Font перечислены в таблице 2.
Таблица 2. – Основные свойства объекта Font.
Название свойства | Тип | Описание |
Name | String | Название шрифта |
Size | Integer | Размер шрифта |
Bold | Boolean | Наличие атрибута «Полужирный» |
Italic | Boolean | Наличие атрибута «Наклонный» |
StrikeThrough | Boolean | Наличие атрибута «Перечеркнутый» |
Subscript | Boolean | Символы в режиме «Нижний индекс» |
Superscript | Boolean | Символы в режиме «Верхний индекс» |
SmallCaps | Boolean | Все символы строчные |
AllCaps | Boolean | Все символы заглавные |
Документ, с точки зрения текстовой информации, состоит из набора (семейства) абзацев, представленных объектами Paragraph, доступ к каждому из которых возможен через функцию item объекта-семейства Paragraphs. Форматирование параграфа, редактирование которого производится в данный момент, осуществляется через свойство ParagraphFormat объекта Selection, а для объектов типа Paragraph возможности форматирования доступны напрямую. Доступные для изменения настройки абзаца включают выравнивание, наличие буквицы (первой буквы абзаца специального начертания), отступы первой строки от границы абзаца и отступы самой границы абзаца от краев страницы, название стиля абзаца, и множество других параметров, используемых в Word. Мы рассмотрим две часто используемых настройки абзаца – отступы абзаца и его выравнивание.
Отступы абзаца задаются свойствами Leftindent (отступ слева), Rightlndent (отступ справа) и FirstLinelndent (отступ первой строки от левой границы абзаца) объекта ParagraphFormat. Значения отступов задаются вещественными числами в условных единицах, которые можно получить из сантиметров или дюймов с помощью методов объекта «Word.Application» CentimetersToPoints и InchesToPoints.
Выравнивание редактируемого (текущего) абзаца выполняется с помощью свойства Alignment объекта ParagraphFormat. Выравнивание всех абзацев документа можно выполнить через одноименное свойство объекта-семейства Paragraphs. В качестве значений, определяющих выравнивание, могут использоваться: 0 (выравнивание по левому краю), 1 (выравнивание по центру), 2 (выравнивание по правому краю) и 3 (выравнивание по ширине).
Для установки одинакового выравнивания для всех абзацев можно воспользоваться объектом-семейством Paragraph.
2.6 Использование закладок
Microsoft Word поддерживает возможность работы с закладками – неотображаемыми атрибутами документа, управление которыми (добавление, удаление и переход на закладку) осуществляется с помощью диалога пункта главного меню Вставка→Закладка. Приложение, которое является OLE-клиентом, может обратиться к семейству Bookmarks закладок для доступа к каждой из них, или к объекту Selection для перехода (перемещения выделения) на закладку, заданную именем.