Лабораторная
работа №8
Управление приложениями пакета MS Office
Управление MS Word
Цель работы:
освоить основные принципы использования технологии OLE Automation для взаимодействия
программ на уровне внутренних командных языков и обмена данными, освоить принципы
и особенности технологии позднего и раннего связывания.
Основные теоретические сведения
0. Рекомендации
по работе с данным документом
Целью данной статьи является
получение навыков взаимодействия с приложением MS Word и
составления отчетов. Главы 1,2,3 носят ознакомительный характер и содержат
информацию по используемой технологии. Глава 4 является обязательной для
чтения, т.к. содержит основные принципы взаимодействия с MS Word. Глава 5 содержит
краткий справочный материал по свойствам и методам основных объектов MS Word. Глава 6 важна с
практической точки зрения, т.к. содержит примеры составления программ. Программный код выделен
моноширинным шрифтом.
1. Возможности.
Несмотря на закрытость кода
крупных программных пакетов, таких как MSOffice, CorelDRAW, Adobe Photoshop,
1C: Предприятие и ряда
других все они обладают возможностью взаимодействовать с другими программами на
уровне внутренних командных языков. Эта позволяет сторонним
разработчикам использовать подобное программное обеспечение для решения ряда
специфических задач. Под взаимодействием подразумевается обмен данными, а
реализуется он на основе технологии OLE Automation.
2.
Применение.
Возможности, предоставляемые
технологией OLE Automation,
позволяют решать целый спектр задач автоматизации. Это автоматизация построения
всевозможных чертежей и шаблонов (CorelDRAW), автоматическая
обработка изображений (Photoshop),
организация взаимодействия между различными системами управления предприятием и
т.д. Наиболее часто OLE Automation
используется для автоматической генерации документации и всевозможных видов
отчетов.
Приложения MS Office в
ряде случаев довольно удобно использовать для документирования информации
содержащейся в базах данных. При этом программист может осуществить проверку текста на орфографию, распечатать текст или
графику, экспортировать отчет и еще целый ряд полезных функций.
3. Технология
OLE Automation
OLE – Object Linking and Embedding – связывание и
внедрение объектов.
Автоматизация позволяет одному
приложению управлять другим приложением. Управляемое приложение называется
сервером автоматизации (в нашем случае MS Word).
Приложение, управляющее сервером, называется клиентом (диспетчером)
автоматизации.
В соответствие с OLE Automation приложение может
выступать в качестве:
ü
Клиента автоматизации – приложение, которое
может использовать автоматизированные объекты, созданные другими приложениями.
ü
Сервера автоматизации - приложение, которое
позволяет использовать свои объекты, клиентам автоматизации.
ü
Гибрида автоматизации – приложение одновременно
является и клиентом и сервером.
В MS Office автоматизация
реализована с помощью языка VBA
– Visual Basic for Applications.
Возможно, вы замечали как просто
копируются объекты (текст, графика, диаграммы, таблицы) из одного приложения
пакета MS Office
в другое (например копируя таблицу из Excel в Word мы получаем полноценную таблицу в Word). Секрет в том, что все
приложения MS Office
взаимодействуют между собой с использованием технологии OLE Automation. Более того, эта технологии
является основной технологией переноса объектов в Windows 95/98/Millennium/NT/2000/XP (в Windows Vista используется
технология dot Net).
4.
Методы взаимодействия с сервером
автоматизации
OLE Automation позволяет управлять
приложениями-серверами путем раннего или позднего связывания. Эти два различных
механизма доступа к серверу автоматизации имеют принципиальные различия, знание
которых позволяет выбрать оптимальный для решения поставленной задачи путь.
4.1
Позднее связывание.
При позднем связывании компилятор
Delphi практически не
контролирует правильность доступа и работы с сервером автоматизации, т.е.
проверка кода на наличие синтаксических ошибок целиком ложится на плечи
программиста.
Для осуществления позднего
связывания необходимо в раздел uses включить
модуль ComObj.
В этом модуле находиться функция
позднего доступа к серверу автоматизации:
function CreateOleObject(const ClassName:
string): IDispatch;
Входные
параметры:
ClassName –
строковый идентификатор программы. Для Word эта строка будет 'Word.Basic' или 'Word.Application',
где Word – это
приложение (сервер автоматизации), к которому мы хотим получить доступ, а слово
после точки это объект автоматизации.
Выходные
параметры:
Указатель на
объект типа IDispatch, который используется для
связи с объектом автоматизации.
Значение возвращаемое функцией CreateOleObject
должно быть присвоено обязательно переменной типа OleVariant.
Пример:
var wow: OleVariant;
… … …
wow:=CreateOleObject('Word.Basic');
… … …
Следует пояснить различие между 'Word.Basic' и 'Word.Application'.
В MS Word до 6 версии включительно
в качестве внутреннего языка макросов использовался язык WordBasic. Более поздние версии MS Word работают с языком VBA, но поддержка WordBasic для совместимости с
предыдущими версиями была оставлена. Для обращения к функциям
WordBasic применяется 'Word.Basic',
а для VBA - 'Word.Application'.
Как уже было сказано, компилятор
ничего не знает о свойствах и методах объектов программы-сервера автоматизации.
Поэтому попытка вызвать несуществующий метод не будет обнаружена на этапе
компилирования, а проявится в процессе выполнения программы. Учитывая этот
недостаток позднего связывания, рекомендуется активно использовать защищенные
блоки (конструкции try..finally и др.) для
предотвращения аварийного завершения программы.
Пример использования позднего
связывания можно посмотреть в папке Example_1.
4.2 Раннее связывание.
При раннем связывании компилятор
получает сведения о свойствах и методах объектов сервера автоматизации из
специальных файлов, которые называются библиотеками типов. Существует несколько
различных форматов библиотек типов, некоторые из них:
ü
Type Library
(.tlb)
– библиотека типов
ü
Object
Type Library (.olb) – библиотека объектных типов
ü
Dynamic
Link Library (.dll) – динамически подключаемая библиотека
В библиотеке типов содержатся
ТОЛЬКО ОПИСАНИЯ методов объектов автоматизации (похоже на заголовочные файлы в
языке Си).
В поставке Delphi 7 имеется
целый ряд компонентов, позволяющих упростить работу с MS Office. Однако будет полезно,
познакомится с методами прямого обращения к MS Word.
4.2.1 Работа
с MS Word без
использования специальных компонентов (прямое связывание)
Т.к. компилятор Delphi пока незнаком с методами объектов
MS Word, то его нужно с ними
познакомить. В Delphi 7
уже имеются модули для работы с MS Office
97\2000\XP, поэтому
библиотеки типов для этих версий можно не импортировать. Если у вас установлена
одна из этих версий, то достаточно включить в раздел uses модуля формы модули с названиями word97, word2000
или wordxp соответственно. Если у вас установлена другая
версия MS Office, то необходимо импортировать информацию о типах в свой
проект:
1) Открываем Project ► Import Type Library главного меню Delphi 7.
2) В
открывшемся окне (оно будет иметь заголовок Import Type Library) Вы увидите список
всех серверов автоматизации. Выберите нужный

Рис. 1
Например, Microsoft Word 11.0 Object Library
(Version 8.3) сервер автоматизации для MS Office 2003. В поле Class names отображаются классы, описанные в библиотеке.
3)
Для импорта библиотеки типов нажмите «Create Unit».
4)
Подключить соответствующий модуль к проекту. Необходимо
добавить в раздел uses модуль с названием word_tlb.
Пример использования раннего
связывания без использования специальных компонент можно посмотреть в папке «Example_1» или «Example_3» (пример посложнее).
4.2.2 Работа с MS Word через компоненты закладки Servers
В Dephi 7 на закладке Servers палитры компонентов
имеется целый набор компонентов для организации доступа к объектам следующих
приложений: Word, Excel, PowerPoint, Outlook и Access. К сожалению, для доступа к
другим приложениям необходимо использовать либо прямое раннее связывание, либо
позднее связывание. На вкладке Servers
вы увидите большое число компонентов. В скобках, после названия самого
компонента, указано название приложения пакета MS Office и версия пакета.
Например, WordApplication
(WordXP)
– компонента работает с MS Word XP. Можно
подключить пакет компонентов работающий с MS Word 2000 или MS Word
97. Для этого необходимо проделать следующие действия:
1). Открываем в главном меню Delphi Component ► Install Packages или Project ► Options и переходим на закладку Packages. Появится окно «Project Options …»:

Рис. 2
2). В окне «Design
Packages» находим строку «Microsoft Office … Sample
Application Server Wrapper Components» (вместо точек может стоять XP, 97 или 2000). Снимаем флажок слева от надписи.
3). Нажимаем кнопку «Add…» и добавляем недостающие пакеты. Все пакеты расположены в
каталоге Delphi 7\Bin\.
|
Версия MS
Office |
Файл пакета компонентов |
Строка описания |
|
XP |
dclofficexp70.bpl |
Microsoft
Office XP Sample Application Server Wrapper Components |
|
2000 |
dcloffice2k70.bpl |
Microsoft
Office 2000 Sample Application Server Wrapper Components |
|
97 |
dclaxserver70.bpl |
Microsoft
Office 97 Sample Application Server Wrapper Components |
В окне «Design Packages»
появятся описания недостающих версий MS Office (Рис. 2) .
Описанную выше последовательность действий достаточно
выполнить один раз. Теперь сменить пакет компонентов, работающий с одной
версией на другой проще простого: достаточно снять со старого пакета индикатор
и установить возле нового пакета. При снятии индикатора будет появляться окно
запроса об удалении пакета:

Рис. 3
Отвечайте отрицательно. Тогда
пакет останется подключенным, но будет в неактивном состоянии. Кнопка «No» на Рис. 3.
Рассмотрим свойства компонента WordApplication.
WordApplication –
компонент сервера автоматизации MS Word.
Основные свойства:
|
Свойство |
Значения |
Описание |
|
Name: string |
|
Содержит имя данного экземпляра
класса TWordApplication |
|
AutoConnect: Boolean; |
|
Изменять это свойство имеет
смысл только на стадии проектирования. Во время выполнения программы
изменение этого свойства ни на что не влияет. |
|
true |
Сервер загружается при запуске
приложения |
|
|
false |
Сервер не загружается при
запуске приложения |
|
|
AutoQuit: Boolean |
true |
Разрывать связь с сервером при
завершении работы с приложением |
|
false |
Не разрывать связь с сервером
при завершении работы с приложением |
|
|
ConnectedKind: TConnectedKind |
|
Это свойство определяет способ
установки соединения с сервером автоматизации |
|
ckRunningOrNew |
Если приложение сервер уже
выполняется, то производится подключение к имеющемуся экземпляру сервера,
иначе запускается новый сервер. Значение по умолчанию. |
|
|
ckNewInstance |
Создается новый экземпляр
сервера |
|
|
ckRunningInstance |
Подключение только к уже
запущенному серверу. Если сервера нет, то будет сгенерирована исключительная
ситуация EEOleSysError*. |
|
|
ckRemote |
Подключение к удаленному серверу |
|
|
ckAttachToInterface |
Подключение не выполняется (для
сервера WordApplication
это свойство неприменимо) Имеет смысл, при AutoConnect=false.
Подключение к серверу можно производтить
методом ConnectTo. |
|
|
RemoteMachineName: String |
|
Сетевое имя компьютера на котором расположен сервер. Имеет смысл при ConnectedKind
= ckRemote |
Эти свойства встречаются и в
других компонентах закладки Servers.
*-
исключительные ситуации описаны в модуле comobj.dcu, поэтому перед
использованием исключений необходимо в раздел uses добавить comobj
uses … comobj;
Основные методы WordApplication:
|
Метод |
Описание |
|
Connect |
Устанавливает связь с сервером
автоматизации MS Word.
Имеет смысл использовать, если AutoConnect = false |
|
ConnectTo(svrIntf:
_Application); |
Выполняет подключение к уже
существующему объекту. В качестве параметра указывается объект с которым
связывается компонент |
|
Disconnect |
Разрыв соединения с сервером. Пример: |
Имеет смысл использование ConnectTo
для подключения к существующему объекту автоматизации. Использование метода Connect или свойства AutoConnect
= true необязательно,
т.к. новое подключение к серверу происходит при первом вызове одного из его
методов или обращении к свойству.
В справочной системе Delphi информация о
компонентах закладки Servers
практически отсутствует. Однако методы и свойства компонента WordApplication
фактически являются методами и свойствами сервера автоматизации. Поэтому, при
возникновении вопросов или неполадок стоит обращаться к документации
поставляемой с MS Office.
5. Объектная модель
MS Word
5.1 Объект Application
Компонент WordApplication
инкапсулирует свойства и методы объекта Application, поэтому они недоступны из панели Object Inspector.
Свойства
объекта Application:
|
Свойство |
Значения |
Описание |
|
Visible: boolean |
True |
Запущенное приложение видимо |
|
False |
Запущенное приложение не видимо |
|
|
ActiveDocument: _Document |
|
Ссылка на документ, который в
данный момент является текущим |
|
Options: Option |
|
Содержит описание параметров MS Word |
|
Options.CheckSpellingAsYouType: WordBool |
true |
Проверка синтаксиса включена |
|
false |
Проверка синтаксиса отключена |
|
|
Options.CheckGrammarAsYouType:
WordBool |
true |
Проверка грамматики включена |
|
false |
Проверка грамматики отключена |
|
|
Documents: Documents |
|
Коллекция объектов типа Document, содержащая все
открытые в данный момент документы. |
|
Selection: Selection |
|
Указывает на выделенный
фрагмент текста или на текущую позицию курсора. |
Методы объекта
Application:
|
Метод |
Описание |
|
procedure Quit( var SaveChanges: OleVariant; var OriginalFormat: OleVariant); |
закрывает приложение Word |
|
SaveChanges – указывает как поступить с изменениями в
документе. Возможные значения: wdDoNotSaveChanges – не сохранять изменения. wdPromptTosaveChanges – запросить у пользователя,
сохранять ли изменения. wdSaveChanges – сохранить изменения. OriginalFormat – позволяет задавать формат, в котором будет
сохранены документы. Возможные значения: wdOrigianlDocumentFormat – сохранить в исходном формате. wdPromptUser – запросить формат у пользователя. wdWordDocument – сохранить в формате документа Word. |
|
5.2 Коллекция Documents
Данная
коллекция содержит все открытые в текущий момент документы.
Свойства
коллекции Documents:
|
Свойство |
Значения |
Описание |
|
Count |
|
Содержит количество открытых в
текущий момент документов. |
Методы
коллекции Documents:
|
Метод |
Описание |
|
function Add( var Template: OleVariant;
var NewTemplate: OleVariant; var DocumentType: OleVariant; var Visible: OleVariant):
WordDocument; |
Добавляет в коллекцию открытых
документов новый документ. Проще говоря создает и открывает новый документ. |
|
Template – имя шаблона, на основе
которого будет создан новый документ. По умолчанию используется «normal.dot». NewTemplate –
принимает значения false
(создается обычный документ) или true (создается шаблон). По умолчанию используется false. DocumentType – определяет тип создаваемого документа. Возможные
значения: wdNewBlankDocument
– создает пустой документ. wdNewEmailMessage
- wdNewFrameset
- wdNewWebPage
– По умолчанию используется wdNewBlankDocument. Visible – принимает значение true, если окно с созданным
документом будет видимо или false
в противном случае. По умолчанию используется значение true. |
|
|
function Open( var FileName: OleVariant; var ConfirmConversions:
OleVariant; var ReadOnly: OleVariant; var AddToRecentFiles: OleVariant; var PasswordDocument: OleVariant; var PasswordTemplate: OleVariant; var Revert: OleVariant;
var WritePasswordDocument:
OleVariant; var WritePasswordTemplate:
OleVariant; var Format: OleVariant; var Encoding: OleVariant;
var Visible: OleVariant;
var OpenAndRepair: OleVariant; var DocumentDirection:
OleVariant; var NoEncodingDialog: OleVariant): WordDocument; |
Открывает созданный ранее
документ. Из всех параметров обязательным является только первый. |
|
FileName
– имя открываемого документа. ConfirmConversions
– определяет, отображать (true)
или нет (false) окно
диалога преобразования файла, если файл не является документом MS Word. ReadOnly
– значение true
устанавливает документ в режим «только для чтения». AddToRecentFiles
– определяет заносить (true)
или нет (false)
открываемый документ в список недавно использованных файлов, расположенный в
нижней части меню файл. PasswordDocument
– пароль для открытия документа. PasswordTemplate
– пароль для открытия шаблона. Revert – при попытке
повторного открытия уже открытого документа данный параметр определяет,
игнорировать ли все изменения, внесенные в документ, и открыть заново (true) или продолжить работу
с уже открытым документом (false). WritePasswordDocument - пароль для сохранения внесенных
в документ изменений. WritePasswordTemplate
- пароль для сохранения внесенных в шаблон изменений. Format – фильтр
используемый при открытии документа. Возможные
значения: wdOpenFormatAllWord
– Документ MS Word wdOpenFormatAuto
– формат определяется автоматически wdOpenFormatDocument
- документ
MSWord 2000 wdOpenFormatEncodeText – Текстовый файл wdOpenFormatRTF – текст в
формате RTF wdOpenFormatTemplate – Шаблон MS Word wdOpenFormatText – Текст в
формате ASCII wdOpenFormatUnicodeText – Текст в
формате Unicode wdOpenFormatWebPages – HTML - документ По умолчанию значение wdOpenFormatAuto. Encoding – кодовая
страница. По умолчанию используется системная кодовая страница. Если кодовая
страница используемая в MS Word
не совпадает с кодировкой текста, то вместо осмысленного текста мы получаем крякозябры. Visible – определяет
видимо (true) или нет
(false) окно. |
|
|
procedure Save( var NoPrompt: OleVariant; var OriginalFormat: OleVariant); |
Сохраняет все открытые
документы. Если документ сохраняется первый раз, то появляется окно диалога
«Сохранить как». Оба параметра являются
необязательными. |
|
NoPrompt
– определяет выдавать (true)
или нет (false)
запрос на сохранение изменений в документе. OriginalFormat - определяет
формат сохраняемого документа. Возможные
значения: wdOrigianlDocumentFormat – сохранить в исходном формате. wdPromptUser – запросить формат у пользователя. wdWordDocument – сохранить в формате документа Word. |
|
|
procedure Close( var SaveChanges: OleVariant; var OriginalFormat: OleVariant; var RouteDocument: OleVariant); |
Закрывает все открытые
документы. Все параметры необязательны. |
|
SaveChanges – определяет действия при закрытии
документа. Возможные
значения: wdDoNotSaveChanges – не сохранять изменения. wdPromptTosaveChanges – запросить у пользователя,
сохранять ли изменения. wdSaveChanges – сохранить изменения. OriginalFormat - задает
формат документа при сохранении. Возможные
значения: wdOrigianlDocumentFormat – сохранить в исходном формате. wdPromptUser – запросить формат у пользователя. wdWordDocument – сохранить в формате документа Word. RouteDocument
- определяет, может ли данный документ быт отослан следующему получателю. |
|
|
function Item( var Index: OleVariant): WordDocument; |
Возвращает ссылку на объект Document. |
|
Index – порядковый номер или имя документа. Имя
документа обязательно должно содержать расширение. |
|
5.3 Объект Document
Каждый элемент коллекции Documents представляет собой
ссылку на объект Document,
а Document – это
документ, открытый в приложении MS Word.
Для работы с документами в Delphi
на закладке Servers
расположен компонент WordDocument. Объект Document имеет довольно сложную структуру, поэтому рассмотрим
основные свойства и методы:
Свойства объекта Document:
|
Свойства |
Значения |
Описание |
|
AttachedTemplate: template |
|
Объект указывающий на шаблон
документа |
|
AutoHyphenation: boolean |
True |
Включает режим расстановки
переносов |
|
false |
Выключает режим расстановки
переносов |
|
|
Content: Range |
|
Содержит весь текст документа |
|
FullName: WideString
|
|
Имя документа и путь к нему |
|
GrammarChecked: boolean |
True |
Проверка грамматики
производится |
|
False |
Проверка грамматики не
производится |
|
|
GrammaticalErrors: ProfreadingErrors |
|
Представляет собой коллекцию объектов типа Range. Каждый из этих объектов
содержит предложение с грамматическими ошибками, найденными в документе. При
отсутствии ошибок GrammaticalErrors=0. |
|
Name: WideString |
|
Имя файла документа |
|
PageSetup: PageSetup |
|
Содержит параметры страниц
документа (поля, размер бумаги и т.д.) |
|
Paragraphs: Paragraphs |
|
Коллекция объектов Paragraph (каждый такой
объект содержит один абзац документа), которая содержит все абзацы документа.
|
|
ReadOnly: Boolean |
True |
Включает режим «Только для
чтения» |
|
False |
Выключает режим «Только для
чтения» |
|
|
Saved: boolean |
True |
Если в документ были внесены
изменения |
|
False |
Если изменения в документ не
были внесены |
|
|
SaveFormat: integer |
|
Формат документа |
|
ShowSpellingErrors: boolean |
True |
Включает режим подчеркивания слов с орфографическими
ошибками |
|
False |
Выключает режим подчеркивания слов с орфографическими
ошибками |
|
|
ShowGrammaticalError: boolean |
True |
Включает режим подчеркивания предложений с грамматическими
ошибками |
|
False |
Выключает режим подчеркивания предложений с
грамматическими ошибками |
|
|
Styles: Styles |
|
Коллекция объектов Style, Содержащая все стили документа. |
|
Tables: Tables |
|
Коллекция объектов Table, содержащая все таблицы документа. |
|
TablesOfContents: TablesOfContents |
|
Коллекция объектов TablesOfContent, содержащая все
оглавления документа. |
|
Type_: TOLEEnum |
|
Тип документа |
|
wdTypeDocument |
Обычный документ |
|
|
wdTypeTemplate |
Шаблон документа |
|
|
Words: Words |
|
Коллекция объектов Word, содержащая все слова документа. |
Методы объекта Document:
|
Метод |
Описание |
|
procedure CheckSpelling; |
Выполняет проверку орфографии в
документе. В случае обнаружения ошибки окно MS Word становится активным, и
открывается диалоговое окно Правописание. |
|
|
|
|
procedure Close( var SaveChanges: OleVariant; var OriginalFormat: OleVariant; var RouteDocument: OleVariant); |
Закрывает документ. |
|
Все параметры необязательны. SaveChanges – определяет действия при закрытии
документа. Возможные
значения: wdDoNotSaveChanges – не сохранять изменения. wdPromptTosaveChanges – запросить у пользователя,
сохранять ли изменения. wdSaveChanges – сохранить изменения. OriginalFormat - задает формат документа при сохранении. Возможные
значения: wdOrigianlDocumentFormat – сохранить в исходном формате. wdPromptUser – запросить формат у пользователя. wdWordDocument – сохранить в формате документа Word. RouteDocument
- определяет, может ли данный документ быт отослан следующему получателю. |
|
|
function Range( var Start: OleVariant; var End_: OleVariant): Range; |
Возвращает фрагмент текста. |
|
Start - порядковый
номер первого символа диапазона. End_ - порядковый номер последнего символа
диапазона. |
|
|
procedure Save; |
Сохраняет изменения внесенные в
документ. |
|
|
|
|
procedure Activate; |
Делает документ активным |
|
|
|
|
function TWordDocument.Undo( var Times: OleVariant): WordBool; |
Отменяет последнее выполненное
действие. Возвращает true,
если действия успешно отменены. |
|
Times – количество
отменяемых действий. Необязательный параметр. По умолчанию Times =1. |
|
5.4 Коллекция Paragraphs
Коллекция Paragraphs является одним из
свойств объекта Document.
Paragraphs содержит все
абзацы документа.
Основные
методы коллекции Paragraphs:
|
Методы |
Свойства |
|
function Add( |
Добавляет новый абзац к
документу |
|
Range – задает фрагмент текста
документа, перед которым будет располагаться добавляемый абзац. Если в
качестве Range
указать EmptyParam,
то добавляемый абзац окажется в конце документа. |
|
|
function Item(Index: Integer): Paragraph; |
Возвращает абзац документа. |
|
Index – номер нужного абзаца.
Нумерация абзацев начинается с единицы. |
|
5.5 Объект Paragraph
Объект Paragraph содержит абзац
документа. Paragraph
позволяет задавать параметры форматирования текста.
Свойства
объекта Paragraph:
|
Свойство |
Значения |
Описание |
|
Alignment: TOLEEnum |
|
Способ выравнивания текста |
|
wdAlignParagraphLeft |
По левому краю |
|
|
wdAlignParagraphCenter |
По центру |
|
|
wdAlignParagraphRight |
По правому краю |
|
|
wdAlignParagraphJustify |
По ширине |
|
|
FirstLineIndent: Single |
|
Отступ первой строки в пунктах.
Положительные значения – отступ. Отрицательные значения – выступ. |
|
Hyphenation: boolean |
True |
Выполнять расстановку переносов
в данном абзаце |
|
False |
Не выполнять расстановку
переносов в данном абзаце |
|
|
LeftIndent: single |
|
Величина левого отступа абзаца
в пунктах. |
|
RightIndent: single |
|
Величина правого отступа абзаца
в пунктах |
|
LineSpacingRule: TOLEEnum |
|
Величина межстрочного интервала
(МИ) |
|
wdLineSpace1pt5 |
Полуторный |
|
|
wdLineSpaceDouble |
Двойной |
|
|
wdLineSpaceAtLeast |
Минимум (МИ больше или равен
значению свойства LineSpacing) |
|
|
wdLineSpaceExactly |
Точно (МИ равен значению
свойства LineSpacing
независимо от размера шрифта абзаца) |
|
|
wdLineSpaceMultiple |
Множитель (МИ в LineSpacing
раз больше единичного интервала установленного для данного размера шрифта) |
|
|
wdLineSpaceSingle |
Одинарный |
|
|
LineSpacing: single |
|
Величина межстрочного интервала
(измеряется в пунктах) |
|
SpaceAfter: single |
|
Величина отступа перед абзацем
(в пунктах) |
|
SpaceBefore: single |
|
Величина отступа после абзаца
(в пунктах) |
5.6 Объект Selection и
объект Range
Эти объекты
являются основными при работе с текстом в MS Word и имеют много общего.
Различия между
Selection и Range:
|
Объект Selection |
Объект Range |
|
Позволяет работать с выделенным
текстом. Т.к. выделенный текст может быть только в одном документе (активном)
и представляет собой непрерывный блок, то доступ к этому объекты можно
получить так: WordApplication1.Selection |
Содержит непрерывный фрагмент
текста документа. Доступ к этому объекту можно получить так: WordDocument1.Range Для выделенного текста WordApplication1.Selection.Range |
|
Не имеет собственных свойств,
для управления стилями (Bold, Italic, Underline). Однако Selection обладает свойством Range, которое является
объектом типа Range,
поэтому для задания стиля выделенного текста можно сделать, например, так: WordApplication1.Selection.Range:=1; |
Обладает свойствами управления
стилями. |
Свойства
объекта Range,
определяющие стиль:
|
Свойство |
Значения |
Описание |
|
Bold: integer |
1 |
Полужирный шрифт |
|
0 |
Не полужирный шрифт |
|
|
wdUndefined |
Разные стили текста |
|
|
wdToggle |
Поменять значение стиля на
противоположное |
|
|
Italic: integer |
1 |
Курсивное начертание шрифта |
|
0 |
Не курсивное начертание шрифта |
|
|
wdUndefined |
Разные стили текста |
|
|
wdToggle |
Поменять значение стиля на
противоположное |
|
|
Underline: TOLEEnum |
|
Подчеркивание текста. |
|
Font:_Font |
|
Тип шрифта, который используется
для форматирования текста. |
Общие свойства
объектов Selection и Range
|
Свойство |
Описание |
|
Start: integer |
Начало диапазона(Range) или выделения(Selection) |
|
End: integer |
Конец диапазона(Range) или выделения(Selection) |
|
Text: WideString |
Содержит текст диапазона (Range)
или выделения (Selection) |
Методы объекта
Selection
|
Метод |
Описание |
|
procedure TypeText (const Text: WideString); |
Осуществляет вставку текста в
выделение |
|
Text – текст, который будет добавлен. Результат зависит от значения
свойства ReplaceSelection
объекта Selection. ReplaceSelection=true – весь выделенный
фрагмент текста заменяется на значение параметра Text. ReplaceSelection=false –
новый текст появляется перед выделением. |
|
Общие для
объектов Selection и Range методы:
|
Методы |
Описание для Selection |
Описание для Range |
|
procedure InsertAfter(const
Text: WideString); |
Добавляет текст после выделения
и включает его в это выделение |
Добавляет текст после диапазона
и включает его в этот диапазон |
|
Text – текст, который будет добавлен. |
||
|
procedure InsertBefore(const
Text: WideString); |
Добавляет текст перед
выделением и включает его в это выделение |
Добавляет текст перед
диапазоном и включает его в этот диапазон |
|
Text – текст, который будет добавлен. |
||
|
procedure Paste |
Копирует содержимое буфера в
объект Selection
(содержимое выделения, при этом, заменяется на содержимое буфера обмена) |
Копирует содержимое буфера в
объект Range
(содержимое диапазона, при этом, заменяется на содержимое буфера обмена) |
|
|
||
|
procedure Copy; |
Копирует текст из объекта Selection в буфер обмена |
Копирует текст из объекта Range в буфер обмена |
|
|
||
|
procedure Collapse(var
Direction: OleVariant); |
Переводит курсор на начало или
конец выделения |
Переводит курсор на начало или
конец диапазона |
|
Direction – указывает направление
перевода курсора. Принимает значения: wdCollapseEnd – в
конец выделения или диапазона wdCollapseStart – в
начало выделения или диапазона |
||
5.7
Коллекция Tables
Позволяет работать с таблицами в
документах MS Word.
Таблицы широко используются при составлении различных документов и отчетов,
позволяя представить информацию в наглядной форме.
Коллекция Tables является свойством объектов Document, Selection и Range (документ, выделение и диапазон
соответственно). При этом коллекции Tables образуют
иерархию.
Свойства коллекции
Tables:
|
Свойство |
Значения |
Описание |
|
Count |
|
Содержит количество таблиц
(объектов типа Table),
входящих в состав коллекции. |
Методы объекта Tables:
|
Метод |
Описание |
|
function Add( const Range: Range; NumRows: Integer; NumColumns: Integer; var DefaultTableBehavior: OleVariant;
var AutoFitBehavior: OleVariant): Table; |
Добавляет новую таблицу. |
|
Range – диапазон, в котором создается таблица. При
этом текст содержащийся в объекте Range будет потерян. NumRows - количество строк в создаваемой таблице. NumColumns - количество столбцов в создаваемой таблице. DefaultTableBehavior - определяет поведение размера ячеек таблицы при вводе
текста (необязательный параметр) Возможные
значения wdWord8TableBehavior
– постоянный размер ячеек. wdWord8TableBehavior
– размер ячеек автоматически подстраивается под содержимое. AutoFitBehavior
– определяет правила для автоматического подбора ячеек (имеет смысл когда ) |
|
|
function Item(Index:
Integer): Table; |
Возвращает элемент коллекции |
|
Index – номер таблицы в коллекции. |
|
5.8 Объект Table и Cell
Объект Table представляет собой отдельную
таблицу.
Основные свойства объекта Table:
|
Свойство |
Описание |
|
Columns: Columns |
Коллекция объектов Column, каждый из которых
представляет собой столбец таблицы |
|
Rows: Rows |
Коллекция объектов Row, каждый из которых
представляет собой строку таблицы |
|
Borders: Borders |
Коллекция объектов Border, с помощью которых
можно управлять линиями сетки таблицы. |
Методы объекта Table:
|
Метод |
Описание |
|
function Cell(Row: Integer;
Column: Integer): Cell; |
Возвращает ячейку таблицы. |
|
Row - номер строки, в
которой находится ячейка Column - номер
столбца, в котором находится ячейка |
|
Объект Cell представляет собой ячейку таблицы.
Свойства объекта Cell:
|
Свойство |
Значения |
Описание |
|
Range: Range |
|
Содержит текст ячейки таблицы |
Методы объекта Cell:
|
Метод |
Описание |
|
procedure Select; |
Выделяет содержимое ячейки. |
|
|
|
6.
Примеры работы с MS Word.
После
прочтения данной статьи могло показаться, что самый лучший метод работы с MS Word это использование
компонентов закладки Servers,
однако эти представления не совсем верны. Рассмотрим положительные и
отрицательные стороны различных способов взаимодействия с MS Word:
|
Позднее
связывание |
|
|
«+» |
«-» |
|
1). Вам не нужно знать какие
типы использует объектная модель сервера; 2). Для работы достаточно
подключения модуля comobj |
1) Компилятор ничего не знает о
свойствах и методах сервера автоматизации, поэтому попытка вызова
несуществующего метода или обращения к несуществующему свойству приведет к
ошибке на этапе выполнения. |
|
Раннее связывание |
|
|
«+» |
«-» |
|
1). Является инструментом для
изучения взаимодействия с приложениями, для которых нет стандартных
компонентов в Delphi
7. 2). Правильность обращения к
методам и свойствам объектов контролируется на этапе компиляции. |
1). Необходима библиотека типов
приложения. |
|
Раннее связывание
(через компоненты) |
|
|
«+» |
«-» |
|
1). Удобный интерфейс
подключения к серверу автоматизации. 2). Правильность обращения к
методам и свойствам объектов контролируется на этапе компиляции. |
1). Применение ограничено
существующим набором компонентов. |
Пример 1.
Будет создан
новый документ, а в его начало добавлены 2 строки, которые не выделяются.
… … …
WordApplication1.Connect;
WordApplication1.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordApplication1.Visible:=true;
WordApplication1.Selection.TypeText('Пример работы с'+#13);
WordApplication1.Selection.TypeText('методом TypeText'+#13);
… … …
Пример 2.
Доступ к
первому абзацу документа можно получить так
… … …
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
P:=WordDocument1.Paragraphs.Item(1);
… … …
где p: paragraph;
Пример 3.
Показывает
различные способы выполнения одного и того же действия
1)
При работе с объектами OLE – сервера можно использовать тип OleVariant.
Это очень удобно так как позволяет не задумываться над типами объектов (их
модно попросту не знать!).
… … …
var R, S, E: OleVariant;
… … …
S:=0;
E:=100;
R:=WordDocument.Range(S, E);
R.InsertAfter(‘new text’);
… … …
2)
Однако использование переменных типа OleVariant
не позволяет проверять компилятору корректность обращений к свойствам и методам
объектов. Поэтому рекомендуется использовать действительные типы объектов:
… … …
var S, E: OleVariant;
R: Range;
… … …
S:=0;
E:=100;
R:=WordDocument.Range(S, E);
R.InsertAfter(‘new text’);
… … …
3)
Можно и не разбивать обращение к методу объекта на
части (не использовать переменную R). В некоторых случаях это оправдано (для лаконичности кода), но
в большинстве случаев приводит к появлению очень длинных строк, что снижает
читабельность программы.
… … …
WordDocument.Range(S, E). InsertAfter(‘new text’);
… … …
Пример 4. Переносит данные из
таблицы StringGrid
в таблицу Word.
uses
ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
WApp, NewDoc, WordTable: OLEVariant;
iRows, iCols, iGridRows, jGridCols: Integer;
begin
try
WordApp := CreateOleObject('Word.Application');
except
// обработка ошибок
Exit;
end;
WordApp.Visible := True;
// Создаем новый документ
NewDoc := WordApp.Documents.Add;
iCols := StringGrid1.ColCount;
iRows := StringGrid1.RowCount;
WordTable := NewDoc.Tables.Add(WApp.Selection.Range, iCols, iRows);
for iGridRows := 1 to iRows do
for jGridCols := 1 to iCols do
WordTable.Cell(iGridRows, jGridCols).Range.Text :=
StringGrid1.Cells[jGridCols - 1, iGridRows - 1];
… … …
7.
Заключение
В данной статье приведены
основные сведения по работе с MS Office
и MS Word в частности.
Представленная здесь справочная информация по объектной модели MS Word не является полной,
однако её достаточно для выполнения довольно сложных задач по созданию и
форматированию документов MS Word.
Дополнительную информацию по объектным моделям приложений пакета MS Office можно найти в
справочном руководстве, которое поставляется с этим пакетом или в сети
Интернет. Данная статья не затрагивает внутренние механизмы функционирования
технологии OLE Automation,
поэтому сведения по COM
– технологии здесь не приводятся.
8.
Литература
При подготовке данной статьи были
использованы:
1). Избачков
Ю. С., Петров В. Н. Информационные системы: Учебник для вузов. 2-е изд. – СПБ.:
Питер, 2005. – 656 с.: ил.
2). Архангельский А. Я.
Программирование в Delphi
7. – М.: ООО «Бином-Пресс»,
3). DRKB v.2.3 (www.drkb.ru)
Задание к лабораторной работе:
Контрольные вопросы: