С программами Microsoft Office Word, Excel и другими можно работать как с объектами автоматизации OLE. Этот подход существенно отличается от работы с этими программами как с серверами СОМ или от использования компонентов страницы Servers.

Работа с объектами автоматизации может быть организована двумя способами: через библиотеки типов и через механизм автоматизации OLE. Использование библиотеки типов имеет то преимущество, что обеспечивает проверку типов. Но для работы с библиотекой типов надо сформировать соответствующий файл и разобраться в нем. Компиляция программ, включающих объект через библиотеку типов, требует заметных затрат времени. По этим причинам мы в дальнейшем этот путь рассматривать не будем. Использование автоматизации OLE применительно к Word и Excel проще, поскольку в эти программы встроена справка по VBA, содержащая описание всех объектов, свойств и методов. Так что разработчик просто получает возможность работать с ними из приложения Delphi.

Основные отличия при использовании автоматизации OLE от работы с серверами СОМ заключаются в следующем. Задание свойств и методов в серверах автоматизации OLE, как будет показано в следующем раздел, намного удобнее. Во-первых, в серверах автоматизации OLE при вызове методов не требуется задание значений необязательных параметров, что существенно упрощает многие операторы. Во-вторых, параметры методов можно задавать в форматах "имя := значение", причем последовательность задания параметров безразлична. Это дополнительное удобство, так как не требуется помнить последовательность параметров в объявлении метода. К тому же, не требуется переводить все значения параметров в тип Ole Variant, обязательный для серверов СОМ.

Еще одним преимуществом серверов автоматизации OLE является то, что вызываемые методы очень близки к их описанию в справке по VB соответствующей программы Microsoft Office. В серверах СОМ в некоторых случаях наблюдаются отличия.

Это все достоинства использования серверов автоматизации OLE. Но есть, к сожалению, и недостаток. Он заключается в том, что при работе в среде Delphi с серверами автоматизации не срабатывают подсказки свойств и методов, которые прекрасно работают с серверами СОМ. Это, конечно, несколько усложняет программирование. И все-таки в целом, как мне представляется, использовать серверы автоматизации OLE в большинстве случаев проще, чем работать с серверами СОМ.

Приложение, использующее сервер автоматизации OLe, должно содержать ссылку на модуль ComObj:

uses ..., ComObj;

Модуль ComObj необходим для работы с любыми объектами OLE. Помимо этого, в приложение могут быть добавлены ссылки на модули WordXP, Word2000, Word97 при работе с Word, или ссылки на модули ExcelXP, Excel20009 Excel97 при работе с Excel. В этих модулях описаны различные константы, используемые для задания значений методов. Если такие константы не требуются, эти модули можно не подключать.

Работа с сервером автоматизации Word может строиться следующим образом:

uses ComObj, WordXP;
var WordApplicationl: OleVariant;

procedure TForml.FormCreate(Sender : TObject); begin

// создание объекта

WordApplicationl := CreateOleObject('Word.Application');
// если нужно сделать видимым WordApplicationl.Visible := true;
end;

procedure TForml.FormDestroy(Sender: TObject); begin

WordApplicationl.Quit;
end;

Переменная WordApplicationl связывается с экземпляром Word функцией CreateOleObject, которая в приведенном примере вызывается в обработчике события OnCreate формы. Эта функция создает новый объект класса, указанного ее аргументом, и возвращает ссылку на идентификатор интерфейса типа IDispatch, используемый для связи с объектом. Таким образом, приведенный оператор запускает новый экземпляр Word, с которым в дальнейшем будет проводиться работа.

Если желательно не создавать новый экземпляр Word, а подключиться к уже выполняющемуся на компьютере, то вместо приведенного выше оператора следует выполнить оператор:

WordApplicationl := GetActiveOleObject('Word.Application');

Функция GetActiveOleObject выполняет функции, аналогичные CreateOleObject, но отличается тем, что соединяется с уже выполняющимся экземпляром программы. Если выполняющегося зарегистрированного объекта OLE нет или объект не имеет интерфейса IDispatch, генерируется исключение OleSysError. Таким образом, если желательно соединиться с выполняющимся экземпляром Word, а при его отсутствии создать новый экземпляр, это можно сделать следующим образом:

try

WordApplicationl := GetActiveOleObject('Word.Application') ; except

WordApplicationl := CreateOleObject('Word.Application');
end;

Созданный экземпляр Word по умолчанию невидим, т.е. работа с ним будет проводиться "за кадром" - пользователь его не увидит. Оператор, задающий значение true свойству сервера Visible, делает окно сервера видимым.

Если после проведения каких-то операций вы хотите завершить выполнение Word, надо выполнить оператор

WordAppli cationl.Quit;

который в приведенном примере помещен в обработчик события OnDestroy формы.

Аналогичным образом может организовываться работа с сервером автоматизации Excel:

uses ComObj, ExcelXP;
var ExcelAppicationl: OleVariant;

procedure TForml.FormCreate(Sender: TObject); begin // создание объекта

ExcelAppicationl := CreateOleObject('Excel.Application');
// если нужно сделать видимым ExcelAppicationl.Visible := true;
end;

procedure TForml.FormDestroy(Sender: TObject); begin

ExcelAppicationl.Quit;
end;

6.1.2 Подключение в приложение и активизация серверов СОМ || Оглавление || 6.1.4 Где найти свойства и методы серверов, и как задавать их параметры


Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Февраль
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс