На этом шаге мы рассмотрим общие принципы работы с выделенными областями, а также с отдельными строками и столбцами.
Когда требуется программно выделить интервал ячеек листа Excel, используют метод Select объекта Range. После этого можно обращаться к ячейкам уже как к выделенной области, используя объект Selection.
procedure TForm1.Button9Click(Sender: TObject); //Выделение диапазона begin Range.Select; end; procedure TForm1.Button9Click(Sender: TObject); //Очистка выделенного диапазона begin E.Selection.Clear; end;
Обычно к выделенной области применяют методы, позволяющие копировать ее содержимое в буфер обмена (метод Сору), или, реже, методы, позволяющие переместить (метод Cut) содержимое в другую область или приложение или документ. Выделенную область ячеек можно также заменить информацией из буфера обмена (метод PasteSpecial). Все эти методы используются, как правило, применительно к объекту Selection, но иногда бывает необходимо применить их непосредственно к ячейкам или областям ячеек, используя объект Range. Все зависит от конкретной постановки задачи и от стиля программирования.
От объектов, описывающих ячейки и области, перейдем к другим объектам - столбцам и строкам. Если задана область ячеек и получена ссылка Range на нее, то количество столбцов будет определяться свойством Count коллекции Columns объекта Range, а количество строк - свойством Count коллекции Rows объекта Range. Доступ ко всем строкам и столбцам листа рабочей книги предоставляют коллекции Rows и Columns объекта ActiveSheet - активного листа рабочей книги. Следующие процедуры позволяют, соответственно, определить количество строк и столбцов, очистить ячейки в выбранных столбцах и строках и заполнить их.
procedure TForm1.Button12Click(Sender: TObject); //Определение максимального количества строк и столбцов begin Edit11.Text:=IntToStr(E.Application.ActiveSheet.Rows.Count); Edit12.Text:=IntToStr(E.Application.ActiveSheet.Columns.Count); end; procedure TForm1.Button10Click(Sender: TObject); //Запись текста в строку begin E.ActiveSheet.Rows[SpinEdit1.Value].Clear; E.ActiveSheet.Rows[SpinEdit1.Value].Value:=Edit10.Text; end; procedure TForm1.Button11Click(Sender: TObject); //Запись текста в столбец begin E.ActiveSheet.Columns[SpinEdit2.Value].Clear; E.ActiveSheet.Columns[SpinEdit2.Value].Value:=Edit10.Text; end;
На рисунке 1 показан результат выполнения представленных процедур.
Рис.1. Результат работы приложения
Приведем полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, ComCtrls, Spin; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; PageControl1: TPageControl; TabSheet1: TTabSheet; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Label3: TLabel; Edit3: TEdit; Button3: TButton; Label4: TLabel; Edit4: TEdit; Button4: TButton; Button5: TButton; TabSheet2: TTabSheet; Label5: TLabel; Edit5: TEdit; Label6: TLabel; Edit6: TEdit; Label7: TLabel; Edit7: TEdit; Button6: TButton; TabSheet3: TTabSheet; Button7: TButton; Edit8: TEdit; Label8: TLabel; Edit9: TEdit; Button8: TButton; Button9: TButton; TabSheet4: TTabSheet; Label9: TLabel; Edit10: TEdit; SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; Label10: TLabel; Label11: TLabel; Button10: TButton; Button11: TButton; Button12: TButton; Label12: TLabel; Edit11: TEdit; Label13: TLabel; Edit12: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Edit1Exit(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Edit5Exit(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E:variant; WB:variant; //Ссылка на рабочую книгу Range: Variant; //Диапазон ячеек Range1: 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.Edit1Exit(Sender: TObject); //Определяем ссылку на область begin Range:=E.ActiveSheet.Range[Edit1.Text]; Edit2.Text:=IntToStr(Range.Count); // Количество ячеек в области Edit3.Text:=Range.Address; // Реальный адрес области end; procedure TForm1.Button3Click(Sender: TObject); // Выделяем область begin Range.Select; end; procedure TForm1.Button5Click(Sender: TObject); // Очищаем область begin Range.Clear; end; procedure TForm1.Button4Click(Sender: TObject); // Заполняем ячейки выбранной области begin Range.Value:=Edit4.Text; end; procedure TForm1.Edit5Exit(Sender: TObject); //Определяем реальный адрес дочерней области begin Range1:=Range.Range[Edit5.Text]; Edit6.Text:=Range1.Address; //Можно по-другому: //Edit6.Text:=Range.Range[Edit5.Text].Address; end; procedure TForm1.Button6Click(Sender: TObject); //Запись в дочернюю область begin Range1.Value:=Edit7.Text; //Можно по-другому: //Range.Range[Edit5.Text].Value:=Edit7.Text; end; procedure TForm1.Button7Click(Sender: TObject); //Определение адреса диапазона ячеек begin Edit8.Text:=E.Selection.Address; end; procedure TForm1.Button8Click(Sender: TObject); //Заполнение выделенного диапазона begin E.Selection.Value:=Edit9.Text; end; procedure TForm1.Button9Click(Sender: TObject); //Очистка выделенного диапазона begin E.Selection.Clear; end; procedure TForm1.Button12Click(Sender: TObject); //Определение максимального количества строк и столбцов begin Edit11.Text:=IntToStr(E.Application.ActiveSheet.Rows.Count); Edit12.Text:=IntToStr(E.Application.ActiveSheet.Columns.Count); SpinEdit1.MaxValue:=StrToInt(Edit11.Text); SpinEdit2.MaxValue:=StrToInt(Edit12.Text); end; procedure TForm1.Button10Click(Sender: TObject); //Запись текста в строку begin E.ActiveSheet.Rows[SpinEdit1.Value].Clear; E.ActiveSheet.Rows[SpinEdit1.Value].Value:=Edit10.Text; end; procedure TForm1.Button11Click(Sender: TObject); //Запись текста в столбец begin E.ActiveSheet.Columns[SpinEdit2.Value].Clear; E.ActiveSheet.Columns[SpinEdit2.Value].Value:=Edit10.Text; end; end.
Со следующего шага мы начнем рассматривать операции над ячейками.