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

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

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

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

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

    Результат работы процедуры изображен на рисунках 1 и 2.


Рис.1. Книга до замены


Рис.2. Книга после замены

    Полная спецификация метода Replace:

  Replace(What, Replacement, LookAt, SearchOrder, 
     MatchCase, MatchByte);

    Аргументы метода Replace приведены в таблице 1.

Таблица 1. Аргументы метода Replace объекта Range
Аргумент Тип Значение
What String Строка поиска
Replacement String Строка замены
LookAt Integer Поиск совпадения строки текста целиком или ее части. Возможные значения:
  • xlWhole (1) - совпадение целиком;
  • xlPart (2) - совпадение в части.
SearchOrder Integer Порядок поиска (перебираем строки или столбцы). Возможные значения:
  • xlByRows (1) - поиск в строках;
  • xlByColumns (2) - поиск в столбцах.
MatchCase Boolean Учет регистра букв при поиске (True - учитывать регистр, по умолчанию - False)
MatchByte Boolean Предназначен для двухбайтовых символов (в версиях для Windows не используется)

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

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,U:string;
    FindRange:variant;
begin
    S:=InputBox ('Поиск текста!','','');
    U:=InputBox ('Замена на текст!','','');
    if S<>'' then
    begin
      try
       FindRange:=E.Cells.Replace(What:=S,Replacement:=U);
      except
       MessageBox(0,'Искомый текст не найден!','Внимание!',0);
      end;
    end;
end;

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

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




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