Шаг 140.
Автоматизация Microsoft Excel. Работа с ячейками.
Высота и ширина ячейки

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

    От методов, позволяющих изменять значение ячеек листа рабочей книги Excel, переходим к изучению других свойств и методов основного объекта приложения Excel - ячейки. Начнем с простого - с определения и изменения размеров самой ячейки, связанных с размерами строк и столбцов. Мы определились, что ячейка всегда определяется объектами Range или Cells. Используя свойства ColumnWidth и RowHeight этих объектов, мы имеем возможность изменить ширину и высоту ячейки. Очевидно, что эти изменения повлекут изменения ширины столбца и высоты строки. В качестве примера использования этих свойств рассмотрим процедуры, позволяющие определить и изменить размеры заданной ячейки.

procedure TForm1.Edit1Exit(Sender: TObject);
//Определение размера ячейки
begin
 Range:=E.ActiveSheet.Range[Edit1.Text];
 Edit2.Text:=FloatToStr(Range.ColumnWidth);
 Edit3.Text:=FloatToStr(Range.RowHeight);
end;

procedure TForm1.Edit2Change(Sender: TObject);
//Изменение ширины ячейки
begin
  Range.ColumnWidth:=StrToFloat(Edit2.Text);
end;

procedure TForm1.Edit3Change(Sender: TObject);
//Изменение высоты ячейки
begin
  Range.RowHeight:=StrToFloat(Edit3.Text);
end;

    Результат выполнения этих процедур приведен на рисунке 1.


Рис.1. Результат работы приложения

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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;
  Range: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;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
//Определение размера ячейки
begin
 Range:=E.ActiveSheet.Range[Edit1.Text];
 Edit2.Text:=FloatToStr(Range.ColumnWidth);
 Edit3.Text:=FloatToStr(Range.RowHeight);
end;

procedure TForm1.Edit2Change(Sender: TObject);
//Изменение ширины ячейки
begin
  Range.ColumnWidth:=StrToFloat(Edit2.Text);
end;

procedure TForm1.Edit3Change(Sender: TObject);
//Изменение высоты ячейки
begin
  Range.RowHeight:=StrToFloat(Edit3.Text);
end;

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

    Можно добавить, что если объект Range ассоциируется с областью ячеек, то действие данных процедур повлечет за собой изменение размеров всех ячеек этой области. Для изменения размеров строки (строк), столбца (столбцов) нужно записать новые значения в свойства RowHeight и ColumnWidth объектов Rows.Item(i:integer) и Columns.Item(i:integer) соответственно. Чтобы изменить высоту и ширину всех строк и столбцов ячеек, используйте свойства RowHeight и ColumnWidth коллекций строк и столбцов (Rows и Columns). С учетом этого несколько изменим единственный оператор в процедурах настройки высоты и ширины ячейки и получим следующий программный текст.

procedure TForm1.Edit2Change(Sender: TObject);
//Изменение ширины столбца
begin
  WB.ActiveSheet.Columns.Item[SpinEdit2.Value].ColumnWidth:=StrToFloat(Edit2.Text);
end;

procedure TForm1.Edit3Change(Sender: TObject);
//Изменение высоты строки
begin
  WB.ActiveSheet.Rows.Item[SpinEdit1.Value].RowHeight:=StrToFloat(Edit3.Text);
end;
    Результат выполнения этих процедур приведен на рисунке 2.


Рис.2. Результат работы приложения

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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, Spin;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label4: TLabel;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure SpinEdit2Change(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.Edit2Change(Sender: TObject);
//Изменение ширины столбца
begin
  WB.ActiveSheet.Columns.Item[SpinEdit2.Value].ColumnWidth:=StrToFloat(Edit2.Text);
end;

procedure TForm1.Edit3Change(Sender: TObject);
//Изменение высоты строки
begin
  WB.ActiveSheet.Rows.Item[SpinEdit1.Value].RowHeight:=StrToFloat(Edit3.Text);
end;


procedure TForm1.SpinEdit1Change(Sender: TObject);
//Определение высоты строки
begin
   Edit3.Text:=FloatToStr(WB.ActiveSheet.Rows.Item[SpinEdit1.Value].RowHeight);
end;

procedure TForm1.SpinEdit2Change(Sender: TObject);
//Определение ширины столбца
begin
   Edit2.Text:=FloatToStr(WB.ActiveSheet.Columns.Item[SpinEdit2.Value].ColumnWidth);
end;

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

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




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