На этом шаге мы рассмотрим некоторые действия, выполняемые над ячейками.
Переменная, которую отображает ячейка, хранится в свойствах Text и Value объекта Range (Cells), поэтому для того чтобы ее получить, достаточно прочитать значение одного из этих свойств. Если тип данных (формат) значения ячейки неизвестен, используем свойство Text, чтобы получить его в виде строки. Когда тип данных известен, можно попытаться использовать свойство Value.
Допустим, нам неизвестен тип данных ячейки. Используем следующую процедуру, которая позволяет прочитать ее значение.
procedure TForm1.Button4Click(Sender: TObject); //Чтение из ячейки var Range: Variant; begin Range:=WB.ActiveSheet.Range['B2:B2']; Edit1.Text:=Range.Text; end;
При выполнении этой процедуры значение ячейки записывается в свойство Text объекта Value типа TEdit. Для записи в ячейку достаточно поменять местами объекты в операторе представленной выше процедуры и использовать свойство Value объекта Range, т. к. свойство Text в данном случае подходит только для чтения. Так мы и поступим, т. е. запишем содержание объекта TEdit приложения Delphi в ячейку рабочей книги Excel как текст.
procedure TForm1.Button3Click(Sender: TObject); //Запись значения в ячейку var Range: Variant; begin Range:=WB.ActiveSheet.Range['B2:B2']; Range.Value:=Edit1.Text; end;
Используя данную процедуру, запишем строку символов '111' в ячейку В2. Результат представлен на рисунке 1.
Рис.1. Результат работы приложения
Такой же результат можно получить, используя объект Cells:
Cell.Value:=Edit1.Text;
И в этом случае записанные в ячейку символы отображаются как строка.
Для того чтобы записать значение в числовом формате, достаточно немного изменить процедуру и записывать в свойство Value не строковую переменную, а переменную типа Integer или Currency, как это показано на следующем примере.
procedure TForm1.Button5Click(Sender: TObject); //Запись числового значения в ячейку var Range: Variant; begin Range:=WB.ActiveSheet.Range['B3:B3']; Range.Value:=StrToCurr(Edit1.Text); end;
Результат выполнения процедуры представлен на рисунке 1. В данном случае объект Range автоматически определил тип записываемого значения и отобразил его соответствующим образом, изменив формат ячейки.
Если требуется отобразить записываемое значение в виде даты, то в свойство Value мы должны записать переменную, которая имеет в разрабатываемом приложении Delphi тип TDate.
procedure TForm1.Button6Click(Sender: TObject); //Запись даты в ячейку var Range: Variant; begin Range:=WB.ActiveSheet.Range['B4:B4']; Range.Value:=StrToDate(Edit1.Text); end;
Соответственно результат будет выглядеть, как показано на рисунке 1.
Приведем полный текст приложения.
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; 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; {$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); //Запись значения в ячейку var Range: Variant; begin Range:=WB.ActiveSheet.Range['B2:B2']; Range.Value:=Edit1.Text; end; procedure TForm1.Button4Click(Sender: TObject); //Чтение из ячейки var Range: Variant; begin Range:=WB.ActiveSheet.Range['B2:B2']; Edit1.Text:=Range.Text; end; procedure TForm1.Button5Click(Sender: TObject); //Запись числового значения в ячейку var Range: Variant; begin Range:=WB.ActiveSheet.Range['B3:B3']; Range.Value:=StrToCurr(Edit1.Text); end; procedure TForm1.Button6Click(Sender: TObject); //Запись даты в ячейку var Range: Variant; begin Range:=WB.ActiveSheet.Range['B4:B4']; Range.Value:=StrToDate(Edit1.Text); end; end.
Мы выяснили следующий факт: свойство Value объекта Range, имеющее тип Variant, допускает запись данных разного типа, что позволяет изменить формат ячейки в дальнейшем.
Это утверждение относится не только к объекту Range, но и к объекту Cells, т. к. они оба представляют собой ссылку на ячейку (или область). Но независимо от того, какой тип имело записанное в ячейку значение, мы можем изменить формат ячейки в любой момент.
На следующем шаге мы рассмотрим формат отображения данных ячейки.