Текстовый редактор Word представляет собой COM-сервер и может
получать и обрабатывать запросы от внешних программ. Все это позволяет
организовать процесс управления и создания документа из внешней программы.
Используя этот механизм, можно создать документ программно так же, как это
делается вручную (посредством меню, кнопок и клавиатуры), но гораздо быстрей и эффектней.
Приступим к решению задачи. Как было сказано выше, Word является
COM-сервером и может управляться внешними программами. Для этого Word
предоставляет три объекта, через которые можно получить доступ к внутренним
объектам Word`а и документов. Эти объекты - Word.Application, Word.Document и
Word.Basic. Ко всем остальным объектам (текст, таблицы, кнопки, меню и др.)
доступ возможен только через них.
Чтобы реализовать все эти возможности Word`а и для удобства своей
работы мне пришлось разработать динамическую библиотеку процедур и функций,
которую можно было использовать в различных своих приложениях для формирования
и печати выходных документов. Зачем нужна такая библиотека, почему бы не
вставлять программный код непосредственно в программу? Здесь причина в
универсальности и гибкости использования библиотеки. Поэтому все ниже описанные
коды легко могут быть оформлены в виде библиотеки для того, чтобы вы могли
использовать ее непосредственно в своих приложениях, не теряя зря времени.
Чтобы почувствовать эффективность использования объектов Word, для
начала попробуем написать несколько функций, которые позволят запустить Word,
создать документ, изменить документ (записать текст), сохранить документ и
закрыть Word. Для создания объекта и его использования применяем переменную W
типа variant и библиотеку ComObj.
Рассмотрим следующий фрагмент кода:
Code:
uses ComObj;
var W:variant;
Function
CreateWord:boolean;
begin
CreateWord:=true;
try
W:=CreateOleObject('Word.Application');
except
CreateWord:=false;
end;
End;
Используя эту функцию, мы можем показывать или прятать Word с
документами.
Следующим шагом будет создание документа. Для этого используем
объект Documents объекта W. Этот объект имеет метод Add, используя который, и
создаем новый документ. При этом, как альтернативный вариант, вместо двух
операторов Doc_:=W.Documents; Doc_.Add; можем использовать один
W.Documents.Add;.
Code:
Function AddDoc:boolean;
Var Doc_:variant;
begin
AddDoc:=true;
try
Doc_:=W.Documents;
Doc_.Add;
except
AddDoc:=false;
end;
End;
Создали документ, что дальше? Следующим шагом, естественно,
является запись любого текста непосредственно в документ. Создадим для этого
функцию SetTextToDoc.
Code:
Function
SetTextToDoc(text_: string;InsertAfter_:
boolean): boolean;
var Rng_:variant;
begin
SetTextToDoc:=true;
try
Rng_:=W.ActiveDocument.Range;
if InsertAfter_
then
Rng_.InsertAfter(text_)
else
Rng_.InsertBefore(text_);
except
SetTextToDoc:=false;
end;
End;
В этой функции используем объект Range и его методы InsertAfter и
InsertBefore для того, чтобы вставить текст в документ с позиции курсора или до
позиции курсора. Наша функция будет вставлять текст в активный документ в
область курсора или выделенного текста.
Фрагмент кода:
Code:
Rng_:=W.ActiveDocument.Range;
if InsertAfter_
then
Rng_.InsertAfter(text_)
else
Rng_.InsertBefore(text_);
можно заменить следующим фрагментом:
Code:
if InsertAfter_
then
W.ActiveDocument.Range. InsertAfter(text_)
else W.ActiveDocument.Range.
InsertBefore(text_);
После того, как документ создан и в него записан текст, его
необходимо сохранить. Для этого используем метод SaveAs объекта ActiveDocument.
Функция SaveDocAs использует этот метод и сохраняет документ в заданный файл.
Code:
Function SaveDocAs(file_:string):boolean;
begin
SaveDocAs:=true;
try
W.ActiveDocument.SaveAs(file_);
except
SaveDocAs:=false;
end;
End;
Закрыть сохраненный документ можно, используя метод Close объекта
ActiveDocument.
Code:
Function CloseDoc:boolean;
begin
CloseDoc:=true;
try
W.ActiveDocument.Close;
except
CloseDoc:=false;
end;
End;
Закрыть Word можно, используя метод Quit объекта Application(W).
Code:
Function
CloseWord:boolean;
begin
CloseWord:=true;
try
W.Quit;
except
CloseWord:=false;
end;
End;
Таким образом, мы уже имеем несколько функций, которыми можно
создать документ, записать в него текст, сохранить документ и отобразить его на
экране монитора. Используя несколько строк, состоящих из функций нашей
библиотеки, мы создаем документ, записываем в него текст, сохраняем и
закрываем. Для демонстрации этого на новой форме разместим на кнопку и
скопируем исходные тексты функций в модуль формы. В процедуру обработки нажатия
кнопки разместим следующий программный текст.
Code:
procedure TForm1.Button1Click(Sender:
TObject);
begin
if CreateWord
thenbegin
Messagebox(0,'Word запущен.','',0);
VisibleWord(true);
Messagebox(0,'Word видим.','',0);
VisibleWord(false);
Messagebox(0,'Word невидим.','',0);
VisibleWord(true);
Messagebox(0,'Word видим.','',0);
If AddDoc thenbegin
Messagebox(0,'Документ
создан.','',0);
SetTextToDoc('Мой первый текст',true);
Messagebox(0,'Добавлен текст','',0);
SaveDocAs('c:\Мой первый текст');
Messagebox(0,'Текст
сохранен','',0);
CloseDoc;
end;
Messagebox(0,' Текст
закрыт','',0);
CloseWord;
end;
end;
Конечно, набора данных функций недостаточно для создания
полноценного отчета. Было бы эффективным создать шаблон некоего документа и
затем заполнять его реальными значениями из базы данных, но для этого, как
минимум, потребуется еще ряд функций. Такими функциями могут быть открытие
ранее созданного документа, поиск текста, замена, копирование.