Шаг 127.
Автоматизация Microsoft Excel. Работа с ячейками. Чтение и запись значений ячеек. Очистка ячеек

    На этом шаге мы рассмотрим некоторые действия, выполняемые над ячейками.

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

    На следующем шаге мы рассмотрим формат отображения данных ячейки.




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