Шаг 133.
Автоматизация Microsoft Excel. Работа с ячейками.
Интервал ячеек (виртуальный адрес)

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

    К области можно применять почти все методы, которые мы применяли к одной ячейке. Есть и дополнительные возможности, присущие области. Важной особенностью является использование виртуального адреса внутри заданной области. Это означает, что внутри области можно задавать адреса, начиная с адреса А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.
Текст этого приложения можно взять здесь (7,6 Кб).

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




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