Шаг 130.
Автоматизация Microsoft Excel. Работа с ячейками.
Формулы (окончание)

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

    Иногда требуется проверить, что находится в ячейке - значение, записанное пользователем, или сформированное в результате выполнения формулы. Для этого можно анализировать содержимое свойства Formula объекта Range, но лучше использовать свойство HasFormula. Если оно имеет значение True, то ячейка содержит формулу, если False - то нет.

procedure TForm1.Button5Click(Sender: TObject);
//Проверка на наличие формулы в ячейке
begin
  Range:=WB.ActiveSheet.Range[Edit1.Text];
  if Range.HasFormula then
    MessageBox(0,'Данная ячейка содержит формулу!','Внимание!',0)
  else
    MessageBox(0,'Данная ячейка не содержит формулу!', 'Внимание!',0)
end;

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


Рис.1. Проверка наличия формулы в ячейке

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

procedure TForm1.Button6Click(Sender: TObject);
//Чтение формулы
begin
  Range:=WB.ActiveSheet.Range[Edit1.Text];
  Edit2.Text:=Range.Formula;
end;

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


Рис.2. Результат чтения формулы из ячейки B2

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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Button3: TButton;
    Label2: TLabel;
    Edit2: TEdit;
    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
  E:variant;
  WB:variant; //Ссылка на рабочую книгу
  Range: 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;
  WB:=E.WorkBooks.Item[1]; // Ссылка на рабочую книгу
end;

procedure TForm1.Button3Click(Sender: TObject);
//Запись формулы
begin
  Range:=WB.ActiveSheet.Range[Edit1.Text];
  Range.Formula:=Edit2.Text;
end;

procedure TForm1.Button4Click(Sender: TObject);
//Вызов мастера функций
begin
  Range:=WB.ActiveSheet.Range[Edit1.Text];
  Range.FunctionWizard;
end;

procedure TForm1.Button5Click(Sender: TObject);
//Проверка на наличие формулы в ячейке
begin
  Range:=WB.ActiveSheet.Range[Edit1.Text];
  if Range.HasFormula then
    MessageBox(0,'Данная ячейка содержит формулу!','Внимание!',0)
  else
    MessageBox(0,'Данная ячейка не содержит формулу!', 'Внимание!',0)
end;

procedure TForm1.Button6Click(Sender: TObject);
//Чтение формулы
begin
  Range:=WB.ActiveSheet.Range[Edit1.Text];
  Edit2.Text:=Range.Formula;
end;

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

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




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