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

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

    Мы рассмотрели способы записи значения ячейки из приложений Delphi, но ячейка и сама может принимать любое значение, когда она содержит формулу. Формула представляет собой некое математическое выражение, состоящее из констант, адресов ячеек, стандартных функций Excel, пользовательских функций и математических символов, записанных в виде строки. Для придания ячейке таких свойств используют запись строки, представляющей формулу, в свойство Formula объекта Range. Для чтения формулы также используется свойство Formula.

    Зададим для выбранной ячейки ее формулу с помощью следующей процедуры.

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

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


Рис.1. Результат работы приложения

    Есть и другой способ, который требует определенных знаний от пользователя, но в некоторых условиях быть более эффективным. Этот способ основан на использовании мастера функций, представляющего собой последовательность диалоговых окон, которые позволяют конструировать формулу для данной ячейки по шагам. Для активизации данного способа необходимо вызвать метод FunctionWizard объекта Range. Рассмотрим следующую процедуру, которую можно использовать для конструирования формулы.

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

    Вызов этой процедуры, содержащей оператор активизации метода FunctionWizard, повлечет запуск диалогового окна. После выполнения всех необходимых шагов в ячейке Range будет записана формула.


Рис.2. Результат работы приложения

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

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;
    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;
  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;

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

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




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