Лабораторная работа №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

 

OLEObject Linking and Embedding – связывание и внедрение объектов.

Автоматизация позволяет одному приложению управлять другим приложением. Управляемое приложение называется сервером автоматизации (в нашем случае MS Word). Приложение, управляющее сервером, называется клиентом (диспетчером) автоматизации.

В соответствие с OLE Automation приложение может выступать в качестве:

ü      Клиента автоматизации – приложение, которое может использовать автоматизированные объекты, созданные другими приложениями.

ü      Сервера автоматизации - приложение, которое позволяет использовать свои объекты, клиентам автоматизации.

ü      Гибрида автоматизации – приложение одновременно является и клиентом и сервером.

В MS Office автоматизация реализована с помощью языка VBAVisual 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». Delphi сгенерирует файл, содержащий описание типов выбранной библиотеки и добавит его к текущему проекту.

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 ComponentInstall Packages или ProjectOptions и переходим на закладку 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

usescomobj;

 

Основные методы 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(var Range: OleVariant): Paragraph;

Добавляет новый абзац к документу

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 
  WAppNewDocWordTableOLEVariant
  iRowsiColsiGridRowsjGridCols: 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.RangeiColsiRows); 

  for iGridRows := 1 to iRows do 
    for jGridCols := 1 to iCols do 
      WordTable.Cell(iGridRowsjGridCols).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. – М.: ООО «Бином-Пресс», 2003 г. – 1152 с.: ил.

3). DRKB v.2.3 (www.drkb.ru)

 

Задание к лабораторной работе:

  1. Вывести результаты простого запроса в файл Word (запрос к одной таблице).
  2. Вывести результаты запроса к связанным таблицам.
  3. Осуществить вывод запросов (пункты 1 и 2) в виде таблицы и в виде произвольно расположенного набора полей.
  4. Продемонстрировать ввод данных в таблицу из документа Word.

 

Контрольные вопросы:

  1. Какая технология позволяет реализовать обмен данными программ друг с другом на уровне внутренних языков?
  2. Перечислите возможности, предоставляемые технологией OLE Automation.
  3. В качестве чего может выступать приложение в соответствие с OLE Automation?
  4. Перечислите методы взаимодействия с сервером автоматизации.
  5. Опишите метод позднего связывания.
  6. Опишите метод раннего связывания без использования специальных компонентов.
  7. Приведите несколько известных форматов библиотек типов, содержащих сведения о свойствах и методах объектов сервера автоматизации.
  8. Представьте последовательность действий при связывании приложения с MS Word через компоненты закладки Servers в Delphi.
  9. Для чего предназначен объект Application? Перечислите некоторые его свойства и методы.
  10. Коллекция Documents и объект Document. Их назначение, свойства и методы.
  11. Коллекция Paragraphs и объект Paragraph. Их назначение, свойства и методы.
  12. Объект Selection и объект Range. Их назначение, свойства и методы. Основные отличия между ними.
  13. Коллекция Tables и Объекты Table и Cell. Их назначение, свойства и методы.
  14. Достоинства и недостатки позднего связывания.
  15. Достоинства и недостатки раннего связывания без использования специальных компонентов.
  16. Достоинства и недостатки раннего связывания с использованием специальных компонентов.

Реклама от TUT.SU »