Шаг 58.
Автоматизация Microsoft Word. Создание простого документа. Поиск текста в документе

    На этом шаге мы рассмотрим варианты поиска текста в документе.

    Ко всему описанному ранее в предыдущих шагах для создания документа нам не хватает функций поиска и подстановки текста в документ. Объект Selection обладает механизмами поиска текста - ими мы и воспользуемся. Рассмотрим объект Find, принадлежащий объекту Selection. Вот фрагмент исходного текста Delphi.

procedure TForm1.Button16Click(Sender: TObject);
//Поиск текста
var
  S: String;
begin
  S:='';
  S:=InputBox('Введите текст для поиска',S,S);
  W.Selection.Find.Forward:=True;
  W.Selection.Find.Text:=S;
  if W.Selection.Find.Execute then
      messagebox(handle,'Поиск текста завершен успешно!','Внимание!',0);
end;

    Запустим программу нажатием кнопки и введем в специальном окне фрагмент текста, который нужно найти в документею. В результате выполнения процедуры искомый фрагмент текста будет выделен (рисунок 1).


Рис.1. Результат поиска

Текст этого приложения можно взять здесь (8,9 Кб).

    В данном примере мы задали текст в режиме поиска "от начала к концу документа", в поля объекта Find поместили нужные данные, которые установили необходимый режим, а затем вызвали метод Execute, который и выполнил поиск текста. Этот метод возвращает значение True/False (при успешном/неуспешном поиске).

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

procedure TForm1.Button17Click(Sender: TObject);
//Поиск и замена
var
  S: String;
begin
  S:='';
  S:=InputBox('Введите текст для поиска',S,S);
  W.Selection.Find.Forward:=True;
  W.Selection.Find.Text:=S;
  if W.Selection.Find.Execute then
     W.Selection.Text:= 'Фрагмент для замены';
end;
procedure TForm1.Button17Click(Sender: TObject);
//Поиск и замена
const wdReplaceAll=2;
var
  S: String;
begin
  S:='';
  S:=InputBox('Введите текст для поиска',S,S);
  W.Selection.Find.Forward:=True;
  W.Selection.Find.Text:=S;
  W.Selection.Find.Replacement.Text:='Текст для замены';
  if W.Selection.Find.Execute(Replace:=wdReplaceAll) then
  messagebox(handle,pchar('Поиск и замена текста "'+S+'" завершена!'),
           'Внимание!', 0);
end;
Текст приложения со вторым вариантом можно взять здесь (9,3 Кб).

    Оба варианта дают один и тот же результат. Их отличия заключаются в том, что в первом варианте производится поиск фрагмента с использованием метода Execute объекта Find, после чего, в случае удачной попытки, выделенный фрагмент заменяется текстом. Во втором варианте метод Execute одновременно выполняет поиск и замену текста. Если данную процедуру (первый или второй вариант) повторять неоднократно, применяя к документу, созданному по шаблону, то можно заполнить его реальными данными, заменив ими текстовые константы. Этого достаточно для формирования простого документа.

    На следующем шаге мы рассмотрим пример использования рассмотренных конструкций.




Предыдущий шаг Содержание Следующий шаг