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