На этом шаге мы рассмотрим использование виртуального адреса внутри диапазона ячеек.
К области можно применять почти все методы, которые мы применяли к одной ячейке. Есть и дополнительные возможности, присущие области. Важной особенностью является использование виртуального адреса внутри заданной области. Это означает, что внутри области можно задавать адреса, начиная с адреса А1 для верхней левой ячейки области. Эта замечательная особенность обусловлена тем, что объект Range включает в себя такой же по характеристикам дочерний объект Range. Первая ячейка дочернего объекта имеет виртуальный адрес А1, а ее реальный адрес совпадает с адресом начала области. Это может избавить программиста от многих проблем, связанных с адресацией ячеек, и существенно упростить исходный текст программы. Например, зададим адрес и размер области 'B2:F15'. Получим ссылку на нее:
Range:=E.ActiveSheet.Range ['B2:F15'] ;
После этого определим дочернюю область, принадлежащую заданной области. Для этого используем оператор:
Range1: =Range.Range['A1:В2'] ;
Область Range1 принадлежит области Range и находится в ее начале. Далее заполним ячейки области Range1 строкой символов, например:
Range1.Value: ='Привет';
Все эти манипуляции можно выполнить иначе (смотри следующие процедуры).
procedure TForm1.Edit5Exit(Sender: TObject); //Определяем реальный адрес дочерней области begin Edit6.Text:=Range.Range[Edit5.Text].Address; end; procedure TForm1.Button6Click(Sender: TObject); //Запись в дочернюю область begin Range.Range[Edit5.Text].Value:=Edit7.Text; end;
Пример использования виртуального адреса изображен на рисунке 1.
Рис.1. Результат работы приложения
Вот полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, ComCtrls; 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; 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); 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; end.
На следующем шаге мы рассмотрим работу с выделенной областью.