Шаг 137.
Автоматизация Microsoft Excel. Работа с ячейками.
Поиск и замена текста

    На этом шаге мы рассмотрим организацию поиска текста на листе Excel.

    Методы поиска и замены текста очень важны при использовании шаблонов документов. На прошлых шагах мы рассмотрели, как с помощью поиска и замены в шаблонах документов для Word получить метод быстрой и гибкой подготовки документов. В рабочих книгах Excel также нет смысла отказываться от этой возможности, поэтому сейчас мы ее и рассмотрим.

    Поиск текста выполняется путем вызова метода Find. В самом простом случае метод Find должен содержать один аргумент - искомый текст. Если требуется уточнить режим поиска, то используются дополнительные необязательные аргументы этого метода, которые позволяют определить направление поиска, область поиска и другие параметры. Метод Find возвращает ссылку на ячейку, если поиск прошел удачно, иначе возвращается ссылка на пустой объект. Рассмотрим, как можно реализовать поиск в приложениях Delphi.

procedure TForm1.Button4Click(Sender: TObject);
//Поиск текста
var S:string;
    FindRange:variant;
begin
    S:=InputBox ('Поиск текста!','','');
    if S<>'' then
    begin
      try
       FindRange:=E.Cells.Find(What:=S);
       S:= FindRange.text;
      except
       MessageBox(0,'Искомый текст не найден!','Внимание!',0);
      end;
    end;
end;

    Используя представленную выше процедуру, зададим условия поиска (рисунок 1).


Рис.1. Задание условия поиска

    Метод Find вернул ссылку на искомый объект. Если этот объект существует реально (в случае успешного поиска), то мы сможем прочитать содержимое ячейки, на которую указывает ссылка, и это не вызовет ошибку. Иначе возникнет исключительная ситуация, обработав которую мы выведем сообщение об отрицательном результате поиска (рисунок 2).


Рис.2. Вывод результата поиска

    Приведем полный текст приложения.

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;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта Excel и отображение окна
begin
  E:=CreateOleObject('Excel.Application');
  E.Visible:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
//Создание рабочей книги
begin
  E.WorkBooks.Add;
end;


procedure TForm1.Button3Click(Sender: TObject);
//Заполним 1-ю строку и 3-й столбец
begin
  E.ActiveSheet.Rows[1].Value:='123';
  E.ActiveSheet.Columns[3].Value:='123';
end;

procedure TForm1.Button4Click(Sender: TObject);
//Поиск текста
var S:string;
    FindRange:variant;
begin
    S:=InputBox ('Поиск текста!','','');
    if S<>'' then
    begin
      try
       FindRange:=E.Cells.Find(What:=S);
       S:= FindRange.text;
      except
       MessageBox(0,'Искомый текст не найден!','Внимание!',0);
      end;
    end;
end;

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

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




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