Импорт информации из Delphi в Word

Источник: welikeit
Владимир Богдановский

Известно, что Word является OLE-объектом. Суть OLE технологии - возможность из разрабатываемого приложения(клиента) взаимодействовать с другими приложениями(серверами). Все приложения Microsoft Office являются так называемыми "серверами автоматизации". Microsoft  Word, являясь сервером OLE, позволяет подключаться к себе клиентам и использовать свои методы и свойства.

Алгоритм  импорта данных в Word следующий:
1) создаем подключение к серверу-приложению Word,
2) создаем или открываем существующий документ
3) вносим в документ изменения
4) манипулируем документом, как хотим (сохраняем его, не показывая при этом экране или же наоборот),
5) отсоединяемся от сервера.

 1) Подключение  к серверу Word производится следующим образом:

      var
      Application: variant;
      begin
      Application:= CreateOleObject('Word.Application');
      end;

Сначала вводим вариантную переменную, затем создаем объект OLE 'Word.Application', и присваиваем его этой переменной. Эта процедура называется "создание экземпляра сервера". Создав этот объект, мы затем программируем его свойства и методы.

 2) после создания экземпляра сервера, нужно либо создать новый документ, либо открыть уже имеющийся, дабы только что созданный экземпляр сервера не содержит документов и, следовательно  информацию импортировать нам пока что некуда.

Создание нового документа

Создание  документа производится методом Add:

Синтаксис метода: Add (Template, NewTemplate, DocumentType, Visible)

Все параметры метода - типа Variant и необязательны,

Template 
Имя шаблона, по которому создается новый документ. Если значение не указано, то используется шаблон Normal.
NewTemplate 
Если использовать значение True, то новый документ открывается как шаблон. Значение по умолчанию - False.
DocumentType 
Может принимать одно из следующих значений констант типа WdNewDocumentType: wdNewBlankDocument (новый чистый документ), wdNewEmailMessage(электронное сообщение)  или wdNewWebPage(Web-страница). Значение по умолчанию wdNewBlankDocument.
Visible
Управляет видимостью созданного документа. Если указать значение True, то документ будет видим. По умолчанию Microsoft Word открывает документ с свойством Visible установленным в True.

 Так как все параметры являются необязательными, то для создания нового документа по шаблону Normal метод можно применить без параметров:

Application.Documents.Add;

Для создания нового документа по шаблону <Шаблон.dot> метод применяется следующим образом

Application.Documents.Add('C:\Program Files\
Microsoft OfficeD9\Шаблон.dot');

Например, создание нового документа в виде Web-страницы будет выглядеть как  

Var
DocumentType: OleVariant;
Application:variant;
begin
Application:= CreateOleObject('Word.Application');
DocumentType:=wdNewWebPage;
Application.Documents.Add(EmptyParam,False,DocumentType,EmptyParam);

Все параметры в методах объявляются типа OleVariant. Если параметр не используется в методе, то вместо него указывается EmptyParam, что означает пустой параметр.

 Открытие документа

Открытие существующего документа Word реализуется методом Open.
Синтаксис метода:

Open (FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format, Encoding, Visible) 

FileName  

В параметре указывается имя файла документа, включая путь. Обязательный параметр.

ConfirmConversions 

Если в значении этого параметра указать значение True, то в случае открытия документа с форматом, отличного от Word,  будет выводится диалоговое окно конвертирования файла. Необязательный параметр.

ReadOnly

 Указывая True, открываем документ только для чтения. Необязательный параметр.

AddToRecentFiles 

Устанавливая значение в True, позволяем добавлять имя открываемого файла в список недавно открытых файлов в меню Файл. Необязательный параметр.

PasswordDocument 

Пароль открываемого документа. Необязательный параметр.

PasswordTemplate

Пароль открываемого шаблона. Необязательный параметр.

 Revert 

Параметр, предусмотренный для открытия файла с именем, уже открытого в данный момент. Если указать True то все изменения текущего документа не сохраняются и открывается файл с подобным именем. При значении False открытый файл активизируется, а новый не открывается. Необязательный параметр.

WritePasswordDocument

Пароль для сохраняемого документа. Необязательный параметр.

WritePasswordTemplate 

Пароль для сохраняемого шаблона. Необязательный параметр.

Format

Конвертор файла, необходимый для открытия документа. Может принимать одно из следующих значений типа  WdOpenFormat: wdOpenFormatAllWord, wdOpenFormatAuto, wdOpenFormatDocument, wdOpenFormatEncodedText, wdOpenFormatRTF, wdOpenFormatTemplate, wdOpenFormatText, wdOpenFormatUnicodeText, or wdOpenFormatWebPages. По умолчанию wdOpenFormatAuto. Необязательный параметр.

Encoding

Кодировка для просмотра документа, может принимать любое правильное значение из ряда констант MsoEncoding. По умолчанию используется системная кодовая станица, установленная по умолчанию. Необязательный параметр.

Visible

УстанавливаяTrue, предусматриваем видимое открытие документа. По умолчанию установлено True. Необязательный параметр.

Например, для открытия документа "c:\Example.doc" метод Open применяется как 

Application.Documents.Open('c:\Example.doc');

а  для файла "C:\Exam.doc" с паролем на открытие "1" как: 

 Application.Documents.Open('c:\Exam.doc',EmptyParam,EmptyParam,EmptyParam,'1'); 

 3) Все элементы рассматриваемого OLE объекта являются так называемыми коллекциями. Коллекция - есть объект, содержащий специфический набор методов и свойств. Коллекция похожа на динамический массив. В ней содержится набор объектов, которые обычно имеют один тип. Вы можете добавлять в нее элементы, удалять и получать их значения. Доступ к элементу осуществляется либо по его порядковому номеру, либо по его имени. Например, все открытые документы представляют собой коллекцию.

 Обращение к документу

 Обращение к открытому документу, как к элементу набора коллекции, можно по порядковому номеру методом Item. Например, обращение ко второму документу будет выглядеть как:

Application.Documents.Item(2);

Нумерация всех элементов в коллекции начинается с единицы, а не с нуля.

Аналогичную операцию можно осуществить еще как.

 Application.Documents(2);

Для работы с документом, его сначала нужно активизировать, т.е. передать ему фокус, подготовить для редактирования или других операций. Активизирование документа  производится методом Activate. Для активизации документа, его нужно выбрать из коллекции по его порядковому номеру:  

Application.Documents.Item(2).Activate;

или по имени файла: 

Application.Document("C:\Example.doc").Activate;

к активному документу можно обращаться, используя свойство ActiveDocument, например, закрыть активный документ:

Application.ActiveDocument.Close; 

3) Внесение изменений в документы.

Теперь настала очередь изучить иерархию методов и свойств OLE объекта.В упрощенном виде картина выглядит следующим образом:

 

                рис.1

Суть иерархии следующая: объект Application содержит коллекцию документов Documents, тот в свою очередь содержит коллекцию Paragraphs (абзацев), областей документа Range, таблиц Table, закладок Bookmark.

Вставка текста в документ

Далее по тексту мы в основном будем манипулировать коллекций объектов Range, т.е. весь текст удобно будет рассматривать как несколько непрерывных областей. Добавление текста осуществляется следующим образом: сначала создается объект Range, представляющий собой непрерывную область документа, затем методами этого объекта добавляется текст. Объект Range может объявляться как

выражение.Range (начало области, конец области)

например, объявленный ниже объект Range1 охватывает собой первые 10 символов второго документа.

var
Range1: variant;
begin
Range1:= Application.Documents(2).Range(1,10);
end;

В документе сначала можно создавать абзацы, т.е. объекты Paragraphs, и затем объединять их в области. К примеру, в начале активного документа методом Add объекта Paragraphs создаем новый абзац, затем на его основе создаем объект Range1:

var
Range1: variant;
begin
Application.ActiveDocument.Paragraphs.Add;
Range1:=Application.ActiveDocument.Paragraphs.Item(1).Range;
end;

Вставка текста производится двумя методами объекта Range: InsertAfter и InsertBefore.

Спецификация методов проста:

выражение.InsertAfter(текст)           этим методом производится вставка текста после начала объекта Range
выражение.InsertBefore(текст)        ,а этим - до.

при использовании этих методов, в качестве параметра указать нужно только текст в апострофах. К примеру, вызов двух операторов

Range1.InsertAfter('это текст InsertAfter');
Range1.InsertBefore('это вставленный текст InsertBefore');

даст нам две строки:

это вставленный текст InsertBefore
это текст InsertAfter

У объекта Range есть много полезных свойств, которые вам неплохо было бы узнать:

свойство Font (шрифт), которое имеет свои подсвойства:

  Font.Bold:=True   - жирность шрифта
 
Font.Name:="Arial"-название шрифта
 
Font.Size:= 24          - размер шрифта

   Font.Color:= clRed    - цвет шрифта

  Font.Italic:= True       - наклонность шрифта

Например, вставка жирной строки зеленого цвета:

Range1.Font.Bold:= True;
Range1.Font.Size:= 24;
Range1.Font.Size:= clGreen;
Range1.InsertAfter('вставленная строка');

Объект типа Range можно форматировать. Например, следующей строкой содержимое объекта Range  выравнивается по центру:

Range1.ParagraphFormat.Alignment = wdAlignParagraphCenter 

Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=2325