Пятница, 17.05.2024, 12:15
Главная Регистрация RSS
Приветствую Вас, Гость
Главная » Delphi и Microsoft Office » Работа с сервером Word. Часть 1
08:20

Работа с сервером Word. Часть 1

Любой сервер СОМ — это объект, имеющий множество свойств, методов, и реагирующий на какие-то события. В этом отношении он ничем не отличается от любого объекта Delphi. Многие из свойств сервера СОМ в свою очередь являются объектами со своими методами и свойствами. Обращение к свойствам объекта класса TWordApplication, инкапсулирующего объект Application (этот объект является самим выполняющимся экземпляром Word), производится так же, как к свойствам любого объекта Delphi. Например, в Application имеется свойство Options — опции, являющееся в свою очередь объектом со множеством свойств. Среди этих свойств есть CheckSpellingAsYouType и CheckGrammarAsYouType — булевы свойства, указывающие, должен ли Word автоматически проверять синтаксис и грамматику и отмечать в тексте ошибки.

Такая проверка замедляет работу Word. Если вы хотите отключить в сервере эти автоматические проверки, введите в приложение операторы:

WordApplicationl.Options.CheckSpellingAsYouType := false; 
WordApplicationl.Options.CheckGrammarAsYouType := false; 

Тем самым вы отключите автоматические проверки, тем более, что в случае, если Word невидим и работает "за кадром", эти проверки совершенно бессмысленны. Среди множества свойств Application следует отметить свойство ActiveDocument — активный документ. Это объект Document, некоторые свойства и методы которого будут описаны ниже.

Практически всегда при работе с сервером Word вам приходится иметь дело со свойством Documents. Это свойство представляет собой собрание всех документов, открытых в Word в данный момент. Каждый документ представлен в этом собрании как объект Document класса TWordDocument, имеющий в свою очередь собственные свойства и методы. Documents — это объект (точнее, интерфейс), имеющий ряд свойств и методов. Общее число открытых документов определяется его свойством только для чтения Count. Оно позволяет проверить, есть ли в Word хотя бы один открытый документ:

if WordApplicationl.Documents.Count = О 
then ...

Метод Close закрывает все открытые в Word документы:

procedure Close (var SaveChanges: OleVariant; 
var OriginalFormat: OleVariant;
var RouteDocument: OleVariant);

Необязательный параметр SaveChanges определяет варианты действий по сохранению изменений закрываемых документов: wdDoNotSaveChanges — не сохранять (принято по умолчанию), wdPromptToSaveChanges — открыть диалог с предложением сохранить документ, wdSaveChanges — сохранить изменения.

Необязательный параметр OriginalFormat определяет формат сохранения документов: wdOriginalDocumentFormat — в первоначальном формате документа, wdPromptUser — предложить пользователю выбор формата, wdWordDocument — в формате документа Word.

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

Например, оператор

WordApplicationl.Documents.Close(EmptyParam, 
EmptyParam, EmptyParam); 
закрывает все документы, открытые в Word. Все параметры в вызове заданы равными EmptyParam, что, как говорилось в статье "Где найти свойства и методы серверов, и как задавать их параметры", означает согласие со значениями по умолчанию. Этот оператор приведен для сервера СОМ. Но напоминаю, что, как сказано в статье "Подключение в приложение и активизация серверов автоматизации OLE", в серверах автоматизации перечислять необязательные параметры не требуется. Так что аналогичный оператор для сервера OLE будет выглядеть так:

WordApplicationl.Documents.Close; 

Свойство Item:

function Item(var Index: OleVariant): WordDocument;
обеспечивает индексированный доступ к указанному документу в коллекции. При этом индекс 1 относится к последнему присоединенному к коллекции документу. Например, следующий код закрывает все открытые документы, кроме одного, открытого раньше всех:

var i: integer; 
n: OleVariant;
n := 1;
for i:= 1 to WordApplicationl.Documents.Count-1 do
WordApplicationl.Documents.Item(n).Close(EmptyParam,
EmptyParam, EmptyParam);

В этом коде метод Close, аналогичный описанному выше, применяется поочередно к каждому документу. Обратите внимание, что индекс закрываемого документа все время равен 1. Дело в том, что после удаления документа, открытого последним (индекс 1), индекс 1 начинает относиться к предыдущему документу.

Для сервера OLE код будет короче, так как не требуется приводить каждый параметр к типу OleVariant, не надо перечислять параметры по умолчанию, и можно задавать параметры в формате "имя := значение":

var i: integer; 
for i:= 1 to WordApplicationl.Documents.Count-1 do
WordApplicationl.Documents.Item(Index := 1).Close;
Категория: Delphi и Microsoft Office | Просмотров: 2671 | Добавил: PeKpyT | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]