На этом шаге мы рассмотрим запись формулы в ячейку и вызов мастера функций.
Мы рассмотрели способы записи значения ячейки из приложений 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.
На следующем шаге мы рассмотрим организацию проверки на наличие формулы и чтение функции.