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