Шаг 128.
Автоматизация Microsoft Excel. Работа с ячейками. Формат отображения данных ячейки

    На этом шаге мы рассмотрим определение и изменение формата отображения данных.

    Формат ячейки определяется свойством NumberFormat объекта Range. Это свойство имеет строковый тип, а форматы данных представляют собой определенным образом заданные символьные константы. Используя свойство NumberFormat, можно изменить формат любой ячейки или области, а также прочитать значение формата с целью его анализа для внесения изменений.

    Определим формат ячейки, которая содержит дату. Для этого воспользуемся представленной ниже процедурой, записанной для приложения Delphi.

procedure TForm1.Button3Click(Sender: TObject);
//Определение формата ячейки
var
  Range: Variant;
begin
  Range:=WB.ActiveSheet.Range[Edit1.Text];
  Edit2.Text:=Range.NumberFormat;
end;

    Для заданного адреса ячейки данная процедура возвращает ее формат, что мы и видим на рисунке 1.


Рис.1. Определяем формат выбранной ячейки

    Итак, мы определили формат ячейки, отображающей дату. Для данного случая формат представляет собой строку типа 'ДД.ММ.ГГГГ'. В строке, где обычно записывают формулы, отображается числовое значение даты без формата. Если мы изменим формат, то само значение не изменится. Изменится только формат отображения его непосредственно в ячейке. Изменим формат этой ячейки, чтобы отобразить год в двухзначном формате с помощью следующей процедуры.

procedure TForm1.Edit2Change(Sender: TObject);
//Изменение формата ячейки
var
  Range: Variant;
begin
  Range:=WB.ActiveSheet.Range[Edit1.Text];
  Range.NumberFormat:=Edit2.Text;
end;

    Изменив строку для задания формата к виду 'ДД.ММ.ГГ', мы сразу обнаружим изменение на рабочем листе книги Excel (рисунок 2).


Рис.2. Изменяем формат представления даты для выбранной ячейки

    Как видно из рисунков 1 и 2, значение ячейки в строке формул не изменилось - изменилось только отображение этого значения в ячейке рабочего листа. Понятно, что для данной ячейки необязательно задавать формат как дату. Если задать другой формат, то отображение записанного в нее числового значения изменится. Значение любого формата, обычно используемого в Excel, можно получить опытным путем. Например, установив его посредством изменения свойства ячеек, а затем прочитав с помощью описанной ранее процедуры.

    Попробуем поэкспериментировать с форматом ячейки, записывая в свойство NumberFormat либо известные значения формата, либо то, что нам подсказывают опыт и интуиция. Например, зададим формат в виде строки символов '000 000 000 000'. В результате значение ячейки будет отображено как целое число, разбитое на разряды.


Рис.3. Задание пользовательского формата для выбранной ячейки

    Вот полный текст приложения.

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;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit2Change(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[Edit1.Text];
  Edit2.Text:=Range.NumberFormat;
end;

procedure TForm1.Edit2Change(Sender: TObject);
//Изменение формата ячейки
var
  Range: Variant;
begin
  Range:=WB.ActiveSheet.Range[Edit1.Text];
  Range.NumberFormat:=Edit2.Text;
end;

end. 
Текст этого приложения можно взять здесь (6,1 Кб).

    На следующем шаге мы рассмотрим формулы.




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