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

    На этом шаге мы рассмотрим общие принципы работы с выделенными областями, а также с отдельными строками и столбцами.

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

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




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