Excel. Трюки и эффекты
Шрифт:
3. Задаем свойства компонента AutoConnect и AutoQuit значением True.
4. Запускаем созданное приложение.
На первый взгляд, ничего существенного не происходит, но результат работы программы можно заметить путем просмотра запущенных процессов (не путать с задачами). В приложении Диспетчер задач среди процессов различных приложений можно увидеть WordCOM. ехе. Этот факт говорит нам о том, что созданное нами посредством СОМ приложение подключилось к серверу Microsoft Word и запустило его. Фактически в системе произошло следующее. В реестре был найден зарегистрированный ранее СОМ-сервер приложения Microsoft Word. Используя все тот же реестр, был найден путь к программе и произведен ее запуск. Вследствие этого мы заметили появление процесса, отвечающего за работу редактора Microsoft Word.
Но
Листинг 9.1.
Запуск Microsoft Word
procedure TFormStartWord.ButtonStartClick(Sender: TObject);
var
//Переменная, интерфейс к объекту
Wordvar : OleVariant;
file_Name : string;
begin
//Начало блока перехвата исключения
try
file_Name := ExtractFilePath(Application.EXEName) +
\'worddoc.DOC\
//Инициализируем объект интерфейса
//для доступа к серверу COM Microsoft Word
Wordvar := CreateOleObject(\'Word.Application\');
//Добавление документа
wordvar.application.documents.add;
wordvar.application.activedocument.range.insertAfter(now);
//Сохранение документа (аналог действиям: «Сохранить как…»,
//с указанием имени файла)
wordvar.application.activedocument.saveas(fileName);
//Завершение работы с приложением и выгрузка COM-сервера
wordvar.application.quit(true,0);
…
end;
Предложенный исходный текст демонстрирует подключение к серверу без помощи компонента среды разработки. Для корректной работы необходимо в раздел uses включить COMOBJ – модуль работы с объектом СОМ. Важно отметить, что наличие функций, вызываемых для объекта wordvar, определяется в период выполнения. Это значит, что ошибка может обнаружиться только в период выполнения программы, поэтому весь код работы с объектом помещен в блок try.
Класс TOLEServer
На вкладке Servers находится набор компонентов для доступа к серверам автоматизации. Не все компоненты возвращают ссылку на объект Application, то есть могут быть получены интерфейсы для доступа к таким вложенным объектам, как документ Microsoft Word или рабочая книга Microsoft Excel. Все компоненты унаследованы от класса TOLEServer, который наследует свойства класса Tcomponent. TOLEServer является базовым классом всех СОМ-серверов. Кроме этого, данный класс имеет еще несколько свойств и методов для управления связью с СОМ-сервером. Среди таковых уже знакомое нам свойство AutoConnect, которое автоматически запускает СОМ-сервер и извлекает из него интерфейс, обеспечивающий связь с контроллером. Еще одно важное свойство класса TOLEServer – это ConnectKind, указывающее тип процесса, с которым устанавливается связь. Свойство используется методом Connect, который вызывается автоматически, если свойство AutoConnect истинно. В табл. 9.1 описаны значения, которые может принимать ConnectKind.
Таблица 9.1. Значение свойства ConnectKind
Более подробно следует рассмотреть значение свойства ConnectKind, равное ckAttachToInterface. Соединение с сервером производится посредством использования главного интерфейса Application, но, например, возникает необходимость подключить к нашему проекту такие компоненты как WordDocument или WordParagraphFormat. В этом случае мы просто подключаемся к уже существующему интерфейсу, а не создаем его заново. Также это может быть необходимо, когда контроллер должен отслеживать события, происходящие в СОМ-сервере.
9.4. Управление Microsoft Word и Microsoft Excel
Трюки в Microsoft Word
В этом разделе мы более подробно остановимся на рассмотрении практических примеров использования СОМ-сервера редактора Microsoft Word. Достаточно популярный редактор обладает обширным набором возможностей, которые можно использовать
Рассмотрим пример приложения, которое будет создавать новый документ Microsoft Word, записывать в него некоторый текст, добавлять таблицу и сохранять полученный документ в файл. В целях наилучшего понимания принципов использования объектов СОМ первый пример не будет использовать компонент среды разработки. Итак, приступим к созданию приложения. Для начала создаем новый проект и помещаем на форму следующие кнопки:
• открытия приложения Microsoft Word;
• вывода текста;
• добавления таблицы;
• сохранения документа;
• завершения работы Microsoft Word.
Мы не будем использовать компоненты, поэтому добавляем в секцию uses модуль ComOb j. Для работы с СОМ-сервером редактора нам понадобится объект OLE. Добавляем переменную типа OleVariant:
var
//Объект OLE
Wrd: OleVariant;
Обработчик кнопки запуска редактора имеет следующий вид (листинг 9.2).
Листинг 9.2.
Запуск редактора Microsoft Word
procedure TFormWord.bnOpenWordClick(Sender: TObject);
begin
//Создаем объект
Wrd := CreateOleObject(\'Word.Application\');
//Делаем видимым приложение
Wrd.Visible := true;
//Добавляем новый документ
Wrd.Documents.Add;
end;
После инициализации объекта создаем новый документ, предварительно активизировав (отобразив на экране) приложение. После того как Microsoft Word запущен и в нем создан новый документ, можно записывать текст. Для этого определяем обработчик кнопки вывода текста (листинг 9.3).
Листинг 9.3.
Вывод текста в Microsoft Word
procedure TFormWord.bnSetTextClick(Sender: TObject);
begin
//Процедура записи текста
//Устанавливаем шрифт
Wrd.Selection.Font.Size := 20;
Wrd.Selection.Font.Bold := true;
//Пишем текст
Wrd.Selection.TypeText(\'Технология COM является одной из современных\');
Wrd.Selection.TypeText(\'технологий организации межпроцессного взаимодействия\'#13#10#13#10);
//Задаем новые параметры шрифта
Wrd.Selection.Font.Size := 12;
Wrd.Selection.Font.Bold := false;
Wrd.Selection.Font.Italic := true;
Wrd.Selection.TypeText(\'Подпись: \');
Wrd.Selection.Font.Bold := true;
Wrd.Selection.TypeText(\'Delphi\'#13#10#13#10);
end;
Особой сложности данный фрагмент вызывать не должен, так как настройка шрифта и вывод теста производятся посредством интуитивно понятных функций и заданием соответствующих свойств. Но надо пояснить, что набор символов # 13 # 10 эквивалентен переходу на новую строку.
Процедура добавления таблицы является достаточно простой и выглядит следующим образом (листинг 9.4).
Листинг 9.4.
Добавление таблицы
procedure TFormWord.bnAddTableClick(Sender: TObject);
begin
//Процедура добавления новой таблицы
Wrd.ActiveDocument.Tables.Add(Wrd.Selection.Range,3,3);
end;
Таблица содержит три столбца и столько же строк. Далее следует пояснить обработчик нажатия кнопки сохранения документа (листинг 9.5).