Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

5.5. Работа с Word

Поместите на форму компонент WordApplicationи задайте свойствоConnectKind. Оно может принимать значения:ckRunningOrNew (подключение к уже запущенному серверу Word), ckNewInstance (приложение обязательно запустит для своих целей собственный экземпляр сервера), ckRunningInstance (приложение подключается только к работающему экземпляру сервера), ckRemote (соединение с сервером на удаленном компьютере).

За соединение с сервером Wordотвечает методConnect. Тип соединения задается свойствомConnectKind.

Примерсоединения с выполняющимся сервером Word (тип соединения установим в ckRunningInstance):

try WordApplication1.Connect;

Except application.Messagebox('приложение будет закрыто', 'ошибка!', 0);

application.Terminate;

end;

Для отсоединения используется метод Disconnect.

Рассмотрим основные свойства сервера.

AutoConnect, AutoQuit- позволяют производить соединение (True) с Word и отсоединение от него автоматически соответственно. Однако постоянно держать соединение с Word обычно не требуется.

Visible=True- MS Word во время нашей работы с ним будет видим. Обычно работа с документами производится в невидимом режиме, а потом показывают на экране уже готовый результат. Но на этапе отладки удобнее видеть своими глазами, что делает программа.

Version- версия MS Word установленного на машине.

Documents- позволяет открыть документ или создать новый, обеспечивает доступ к уже открытым документам.

Примероткрытия документа (предварительно описываем переменную FileName типа OleVariant и присваиваем ей имя файла):

WordApplication1.Connect;

WordApplication1.Documents.Open(FileName,

EmptyParam, EmptyParam, EmptyParam,

EmptyParam, EmptyParam, EmptyParam,

EmptyParam, EmptyParam, EmptyParam,

EmptyParam, EmptyParam);

WordDocument1.ConnectTo(WordApplication1.ActiveDocument);

Пример создания нового документа:

WordApplication1.Connect;

WordApplication1.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);

WordDocument1.ConnectTo(WordApplication1.ActiveDocument);

При наличии нескольких открытых документов можем переключаться между ними, но не прямо, а через «активное» окно Word.

Пример:

var vid: OleVariant;

begin vid := 2;

WordApplication1.Windows.Item(vid).Activate;

WordDocument1.ConnectTo(WordApplication1.ActiveDocument);

При этом переменная vid может принимать значения от 1 до WordApplication1.Documents.Count. Далее можем работать с указанным документом. Нумерация документов происходит в порядке их открытия.

Можно отключить проверку правописания и грамматики:

WordApplication1.Options.CheckSpellingAsYouType := False;

WordApplication1.Options.CheckGrammarAsYouType := False;

Чтобы выгрузить Word, вызываем метод Quit.

Компонент WordDocumentпредназначен для работы с документами. Для соединения документов служит методConnectTo. Если открыт только один документ, то соединяемся с «активным» документом.

Для сохранения документа используем метод Save [(<новое имя>)]

Пример: filename := 'd:\test.doc'; WordDocument1.Save(filename);

Если нужно записать документ не только под другим именем, но и в другом формате, используем Save с двумя параметрами:

WordDocument1.SaveAs(FileName, FileFormat).

Переменная FileFormat типа OleVariant может принимать значения: wdFormatDocument (документ Word), wdFormatDOSText (простой текст), wdFormatRTF (файл RTF). Полный список форматов можно найти в заголовочном файле, введя в строку поиска «Format».

Можно для сохранения использовать и метод Close.

Пример:

var vschange: OleVariant;

begin vschange := wdSaveChanges; //режим сохранения

WordDocument1.Close(vschange);

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

Метод Closeможем вызвать и без параметров. Но если в документ вносились какие-то изменения, будет выдан стандартный запрос на их сохранение.

Часто перед работой с Word возникает необходимость проверить, нет ли на машине открытых документов, сохранить их и закрыть во избежание порчи:

Var i, doccount: Integer;

begin doccount := WordApplication1.Documents.Count;

for i := 1 to doccount do

begin WordDocument1.ConnectTo(WordApplication1.ActiveDocument);

WordDocument1.Save; WordDocument1.Close;

end;

Добавление в документ Word нужной строки текста.

Поместим на форму компоненты WordDocument, WordApplication и WordParagraphFormatс палитрыServers. СвойствоRangeпредставляет собой текст; это может быть как весь текст документа, так и любая его часть. Его пределы задаются двумя (или меньше) параметрами типа OleVariant.

Примеры:

var range1, range2, range3, a, b: OleVariant;

begin range1:= WordDocument1.Range; //весь текст документа

a:= 5;b:= 15; range2 := WordDocument1.Range(a, b); //5-15 символы

range3:=WordDocument1.Range(a); // с пятого символа до конца документа

range2.InsertAfter('MS Word') // вставка текста после выделенного

WordDocument1.Range(a,b).Text; // вставка текста перед выделенным

WordDocument1.Range(a,b).Font.Bold:=1; //жирность шрифта

WordDocument1.Range(a,b).Font.Size:=14; //размер шрифта

WordDocument1.Range(a,b).Font.Color:=clRed; //цвет шрифта

WordDocument1.Range(a,b).Select; // выделить строку

WordDocument1.Range(a,b).Cut; //вырезать строку в буфер

WordDocument1.Range(a,b).Copy; //копировать строку в буфер

WordDocument1.Range(a,b).Paste; //вставить из буфера строку или рисунок

Свойство Rangeпозволяет найти в документе нужную строку.

Пример. Найти слово «picture» и на его место вставить рисунок.

var a, b, vstart, vend: OleVariant; j, ilengy: Integer;

begin ilengy := Length(WordDocument1.Range.Text);

for j := 0 to ilengy - 8 do

begin a := j; b := j + 7; if WordDocument1.Range(a, b).Text = 'picture'

then begin vstart := j; vend := j + 7; end;

end; WordDocument1.Range(vstart, vend).Select;

end;

Свойство Selection представляет собой выделенный фрагмент документа. Если выделения нет, то это - текущая позиция курсора.

Пример:

WordApplication1.Selection.InsertAfter("text1"); //вставить до выделенного

WordApplication1.Selection.InsertBefore("text2");//вставить после выделен.

WordApplication1.Selection.Font.Bold:=1; //жирность шрифта

WordApplication1.Selection.Font.Size:=16; //размер шрифта

WordApplication1.Selection.Font.Color:=clGreen; //цвет шрифта

Убрать выделение цветом можно методом Collapse({wdCollapseEnd | wdCollapseStart})

Пример:

var vcol: OleVariant;

begin vcol := wdCollapseStart; //курсор перед выделенным текстом

WordApplication1.Selection.Collapse(vcol);