На этом шаге мы рассмотрим организацию поиска фрагмента текста в документе Word.
Рассмотрим несколько простых процедур, позволяющих редактировать текст в документе. Нам потребуются возможности: перемещения по тексту документа, поиска фрагмента текста, копирования и вставки текста, вставки текста из буфера обмена.
Сначала рассмотрим процедуры, позволяющие перемещаться по тексту документа. Их нужно вызывать перед выполнением поиска - для позиционирования курсора. Для поиска фрагмента в документе, скорее всего, дополнительно понадобятся две процедуры - перемещение в начало документа (для того чтобы начать поиск) и перемещение в конец документа (для добавления новых записей). Процедура StartOfDocument перемещает курсор в начало документа, а процедура EndOfDocument - в конец документа. Пример использования этих процедур в среде Delphi выглядит так:
procedure TForm1.Button4Click(Sender: TObject); //Перемещение курсора в начало документа begin WB.StartOfDocument; end; procedure TForm1.Button5Click(Sender: TObject); //Перемещение курсора в конец документа begin WB.EndOfDocument; end;
После того как мы переместили курсор в начало документа, можно начать поиск фрагмента текста. Поиск текста производит процедура EditFind(text: string). В случае успешного поиска данная процедура выделяет искомый фрагмент текста. Для продолжения поиска по документу необходимо повторно вызвать эту процедуру. Чтобы убедиться в том, что искомый фрагмент существует и был выделен в результате выполнения процедуры поиска, следует вызвать функцию EditFindFound - она возвращает значение True в результате успешного поиска. Рассмотрим следующий фрагмент исходного текста:
procedure TForm1.Button6Click(Sender: TObject); //Поиск фрагмента текста в документе var t: String; begin t:=InputBox('Введем фрагмент текста для поиска','',''); WB.EditFind(t); if WB.EditFindFound then ShowMessage('Фрагмент текста '+''''+t+''''+ ' найден.') else ShowMessage('Фрагмент текста '+''''+t+''''+ ' не найден.') end;
Используя приведенную процедуру, попробуем найти фрагмент текста в документе. Для этого откроем документ и введем искомое слово (рисунок 1).
Рис.1. Пример работы приложения
После того как слово для поиска введено, процедура WB.EditFind(t) выполнит поиск. В случае успеха она выделит фрагмент текста, а функция WB.EditFindFound возвратит значение True. Когда заданный текст не найден, то никакой фрагмент не будет выделен, a WB.EditFindFound возвратит значение False. Если выполнить представленную выше процедуру дважды, то поиск продолжится с теми же параметрами и будет выделен следующий фрагмент, удовлетворяющий условиям поиска.
Вот полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; OpenDialog1: TOpenDialog; Button4: TButton; Button5: TButton; Button6: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var WB: Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание объекта WordBasic begin WB:=CreateOleObject('Word.Basic'); end; procedure TForm1.Button2Click(Sender: TObject); //Показать окно Word begin WB.AppShow; end; procedure TForm1.Button3Click(Sender: TObject); //Открыть документ Word begin if OpenDialog1.Execute then WB.FileOpen(OpenDialog1.FileName); end; procedure TForm1.Button4Click(Sender: TObject); //Перемещение курсора в начало документа begin WB.StartOfDocument; end; procedure TForm1.Button5Click(Sender: TObject); //Перемещение курсора в конец документа begin WB.EndOfDocument; end; procedure TForm1.Button6Click(Sender: TObject); //Поиск фрагмента текста в документе var t: String; begin t:=InputBox('Введем фрагмент текста для поиска','',''); WB.EditFind(t); if WB.EditFindFound then ShowMessage('Фрагмент текста '+''''+t+''''+ ' найден.') else ShowMessage('Фрагмент текста '+''''+t+''''+ ' не найден.') end; end.
На следующем шаге мы рассмотрим вставку фрагментов текста в документ Word.