Пятница, 17.05.2024, 12:47
Главная Регистрация RSS
Приветствую Вас, Гость
Главная » Delphi и Microsoft Office » Подключение в приложение и активизация серверов автоматизации OLE
08:12

Подключение в приложение и активизация серверов автоматизации OLE

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

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

Во-первых, в серверах автоматизации OLE при вызове методов не требуется задание значений необязательных параметров, что существенно упрощает многие операторы.

Во-вторых, параметры методов можно задавать в форматах "имя := значение", причем последовательность задания параметров безразлична.

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

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

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

uses ..., ComObj;

Модуль ComObj необходим для работы с любыми объектами OLE. Помимо этого, в приложение могут быть добавлены ссылки на модули WordXP, Word2000, Word97 при работе с Word, или ссылки на модули ExcelXP, Excel2000, 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
WordApplica.tionl := CreateOleObject ( 'Word. Application ');
end;

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

WordApplicationl.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;
Категория: Delphi и Microsoft Office | Просмотров: 3789 | Добавил: PeKpyT | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]