Шаг 92.
Автоматизация Microsoft Word. Работа с объектом WordBasic. Поиск и редактирование текста в документе Word

    На этом шаге мы рассмотрим организацию поиска фрагмента текста в документе 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.
Текст этого приложения можно взять здесь (6,1 Кб).

    На следующем шаге мы рассмотрим вставку фрагментов текста в документ Word.




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