Шаг 134.
Автоматизация Microsoft Excel. Работа с ячейками.
Интервал ячеек (выделенные области)
На этом шаге мы рассмотрим способы определения выделенных областей.
Мы рассмотрели случаи, когда область задается программным путем посредством адресов. Но часто пользователь
просто выделяет область ячеек, а затем выполняет с ней последовательность каких-либо действий. Программист Delphi,
разрабатывая свое приложение, должен учесть этот случай и обработать выделенную часть листа рабочей книги Excel.
Одним из свойств объекта Application является объект Selection, который обладает множеством свойств
и методов, присущих визуальным компонентам Excel, в том числе некоторыми свойствами объекта Range,
позволяющими обеспечить доступ к выделенной области. В общем случае для обеспечения доступа к выделенным
ячейкам можно воспользоваться оператором
который присваивает переменной Range значение ссылки на область выделенных ячеек. После этого программист
может воздействовать на эту область.
Есть и другой способ обращения к выделенной области - без использования промежуточных ссылочных переменных.
Можно напрямую применять к объекту Selection методы и использовать свойства объекта Range, но
только когда выделена хотя бы одна ячейка. Следующие процедуры демонстрируют это.
procedure TForm1.Button7Click(Sender: TObject);
//Определение адреса диапазона ячеек
begin
Edit8.Text:=E.Selection.Address;
end;
procedure TForm1.Button8Click(Sender: TObject);
//Заполнение выделенного диапазона
begin
E.Selection.Value:=Edit9.Text;
end;
На рисунке 1 представлена форма приложения Delphi, в которой используются представленные процедуры,
определяющие адрес выделенной области и заполняющие все ее ячейки значением, выбранным пользователем этого
приложения.

Рис.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;
TabSheet3: TTabSheet;
Button7: TButton;
Edit8: TEdit;
Label8: TLabel;
Edit9: TEdit;
Button8: TButton;
Button9: 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);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(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;
end.
Текст этого приложения можно взять
здесь (8,2 Кб).
На следующем шаге мы рассмотрим очистку и заполнение выделенных областей.
Предыдущий шаг
Содержание
Следующий шаг