Попробуем задать координаты области и поработать с ними. В первую оче-
редь нас могут заинтересовать такие параметры этой области, как количест-
во ячеек и ее реальный адрес на листе рабочей книги Excel. Во-вторых, нам
будет полезно узнать, как изменить, скопировать или очистить содержание
ячеек этой области.
Рис. 12.10. Запись и чтение комментария для ячейки
Рассмотрим в качестве примера следующие процедуры (см. приложение на
сопроводительном диске книги).
Параметры области, заполнение ячеек области
procedure TOKBottomDlg3.addresExit(Sender: TObject);
begin
// Определяем ссылку на область
Range:=forml.E.ActiveSheet.Range[addres.Text];
count.Text:=inttostr(Range.Count); // Количество ячеек в области
area addres.Text:=Range.Address; // Реальный адрес области
end;
procedure TOKBottomDlg3.ButtonlClick(Sender: TObject);
begin
// Выделяем область
Range.Select;
end;
procedure TOKBottomDlg3.Button3Click(Sender: TObject);
begin
// Очищаем область
Range, deadend;
procedure TOKBottomDlg3.Button2Click(Sender: TObject);
begin
// Заполняем ячейки выбранной области
Range.Value:=textl.Text;
end;
Результат выполнения процедуры заполнения ячеек области представлен
на рис. 12.11.
Рис. 12.11. Заполнение ячеек области
К области можно применять почти все методы, которые мы применяли к
одной ячейке. Есть и дополнительные возможности, присущие области.
Важной особенностью является использование виртуального адреса внутри
заданной области. Это означает, что внутри области можно задавать адреса,
начиная с адреса А1 для верхней левой ячейки области. Эта замечательная
особенность обусловлена тем, что объект Range включает в себя такой же
по характеристикам дочерний объект Range. Первая ячейка дочернего объ-
екта имеет виртуальный адрес А1, а ее реальный адрес совпадает с адресом
начала области. Это может избавить программиста от многих проблем, свя-
занных с адресацией ячеек, и существенно упростить исходный текст про-
граммы. Например, зададим адрес и размер области 'B5.F15'. Получим
ссылку на нее:
Range:=E.ActiveSheet.Range['B5:F15'] ;
После этого определим дочернюю область, принадлежащую заданной облас-
ти. Для этого используем оператор:
MyRange:=Range['Al:В2'];
Область MyRange принадлежит области Range и находится в ее начале. Да-
лее заполним ячейки области MyRange строкой символов, например:
MyRange.Value:='222';
Все эти манипуляции можно выполнить иначе (см. следующую процедуру).
Использование виртуальной области
procedure TOKBottomDlg3.Button4Click(Sender: TObject);
begin
Range.Range[addres1.Text].Value:=text2.Text;
end;
Результат будет таким же (рис. 12.12).
Мы рассмотрели случаи, когда область задается программным путем по-
средством адресов. Но часто пользователь просто выделяет область ячеек, а
затем выполняет с ней последовательность каких-либо действий. Програм-
мист Delphi, разрабатывая свое приложение, должен учесть этот случай и
обработать выделенную часть листа рабоче# книги Excel. Одним из свойств
объекта Application является объект Selection, который обладает множеством
свойств и методов, присущих визуальным компонентам Excel, в том числе
некоторыми свойствами объекта Range, позволяющими обеспечить доступ к
выделенной области. В общем случае для обеспечения доступа к выделен-
ным ячейкам можно воспользоваться оператором
Range:=Е.Selection;
который присваивает переменной Range значение ссылки на область выде-
ленных ячеек. После этого программист может воздействовать на эту об-
ласть.
Есть и другой способ обращения к выделенной области — без использова-
ния промежуточных ссылочных переменных. Можно напрямую применять
к объекту Selection методы и использовать свойства объекта Range, но толь-
ко когда выделена хотя бы одна ячейка. Следующие процедуры демонстри-
руют это.
Рис. 12.12. Работа с виртуальной областью
Определение адреса и заполнение выделенной области
procedure TOKBottomDlg3.ButtonUClick(Sender: TObject);
begin
address_s.Text:=E.Selection.Address;
end;
procedure TOKBottomDlg3.Buttonl2Click(Sender: TObject);
begin
E.Selection.Value:=text_s.Text;
end;
На рис. 12.13 представлена форма приложения Delphi, в которой использу-
ются представленные процедуры, определяющие адрес выделенной области
и заполняющие все ее ячейки значением, выбранным пользователем этого
приложения.
Рис. 12.13. Работа с областью выделенных ячеек
Когда требуется программно выделить интервал ячеек листа Excel, исполь-
зуют метод Select объекта Range. После этого можно обращаться к ячейкам
уже как к выделенной области, используя объект Selection.
Обычно к выделенной области применяют методы, позволяющие копиро-
вать ее содержимое в буфер обмена (метод Сору), или, реже, методы, по-
зволяющие переместить (метод Cut) содержимое в другую область или при-
ложение или документ. Выделенную область ячеек можно также заменить
информацией из буфера обмена (метод PasteSpecial). Все эти методы ис-
пользуются, как правило, применительно к объекту Selection, но иногда бы-
вает необходимо применить их непосредственно к ячейкам или областям
ячеек, используя объект Range. Все зависит от конкретной постановки зада-
чи и от стиля программирования.
Программное выделение и очистка области
procedure TOKBottomDlg3.ButtonlClick(Sender: TObject)
begin
Range.Select;
end;
procedure TOKBottomDlg3.Buttonl3Click(Sender: TObject);
begin
E. Selection.deadend;
От объектов, описывающих ячейки и области, перейдем к другим объек-
там — столбцам и строкам. Если задана область ячеек и получена ссылка
Range на нее, то количество столбцов будет определяться свойством Count
коллекции Columns объекта Range, а количество строк — свойством Count
коллекции Rows объекта Range. Доступ ко всем строкам и столбцам листа
рабочей книги предоставляют коллекции Rows и Columns объекта
ActiveSheet — активного листа рабочей книги. Следующие процедуры по-
зволяют, соответственно, определить количество строк и столбцов, очистить
ячейки в выбранных столбцах и строках и заполнить их.
Очистка и заполнение ячеек строк и столбцов листа рабочей книги
procedure TOKBottomDlg3.FormCreate(Sender: TObject);
begin
row_ount.text:=inttostr(forml.E.Application.ActiveSheet.Rows.Count);
col_ount.text:=inttostr(forml.E.Application.ActiveSheet.Columns.Count);
end;
procedure TOKBottomDlg3.Button7Click(Sender: TObject);
begin
E.ActiveSheet.Rows[Row.Value].Clear;
E.ActiveSheet.Rows[Row.Value].Value:= text_rc.Text;
end;
procedure TOKBottomDlg3.Button8Click(Sender: TObject);
begin
E.ActiveSheet.Columns[Col.Value].Clear;
E.ActiveSheet.Columns[Col.Value].Value:= t ext_rc.Text;
end;
На рис. 12.14 показан результат выполнения представленных процедур. |