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