На этом шаге мы рассмотрим некоторые действия, выполняемые над ячейками.
Переменная, которую отображает ячейка, хранится в свойствах 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.
Текст этого приложения можно взять здесь (6,3 Кб).
Мы выяснили следующий факт: свойство Value объекта Range, имеющее тип Variant,
допускает запись данных разного типа, что позволяет изменить формат ячейки в дальнейшем.
Это утверждение относится не только к объекту Range, но и к объекту Cells, т. к. они оба
представляют собой ссылку на ячейку (или область). Но независимо от того, какой тип имело записанное в ячейку
значение, мы можем изменить формат ячейки в любой момент.
На следующем шаге мы рассмотрим формат отображения данных ячейки.