На этом шаге мы рассмотрим основные операции над ячейками.
На прошлых шагах мы рассмотрели только манипуляции с содержимым ячеек, при этом сами ячейки оставались неизменными, т. е. их другие характеристики не менялись. Если бы ячейка имела заливку и линии границы, то изменение или даже полная очистка ее содержимого не повлияла бы на ее другие визуальные характеристики - они остались бы неизменными. Радикальный способ, позволяющий полностью изменить ячейку по определенному адресу, - это удаление ячейки или вставка на ее место другой. При этой манипуляции происходит смещение остальных ячеек к началу или к концу в зависимости от выбранной операции над ячейками. Для удаления ячейки предназначен метод Delete объекта Range, а для вставки - метод Insert объекта Range. Оба метода могут быть вызваны с аргументом. При удалении аргумент метода Delete определяет, какая ячейка из столбца или строки будет замещать удаленную ячейку. При вставке новой ячейки аргумент метода Insert определяет, какие ячейки будут сдвинуты - ячейки прилегающего столбца или строки. Методы Delete и Insert можно применять не только к отдельным ячейкам, но и к группе ячеек, а также к строкам и столбцам ячеек.
Рассмотрим, как используются эти методы в приложениях Delphi. Пусть имеется лист рабочей книги Ecxel, в ячейках которого записаны некоторые числовые константы. Требуется вставить новые четыре ячейки в область А1:В2. Используем метод Insert без аргументов. По умолчанию, при вставке ячеек сдвигаются ячейки, расположенные ниже вставляемой области. Используем следующую процедуру.
procedure TForm1.Button4Click(Sender: TObject); //Вставка ячеек в область A1:B2 begin E.Application.Range['A1:B2'].Insert; end;
Если задать адрес объекта Range в виде строки 'А1:В2', то мы получим результат, показанный на рисунке 1.
Рис.1. Результат работы приложения
Как видно из этого рисунка, ячейки области А1:В2 были смещены вниз на две строки, а на их место вставлены новые, пустые. Если до вызова метода Insert был вызван метод Сору, или буфер обмена уже содержал скопированную ранее информацию (т. е. в буфере уже находились ячейки), то их содержимое будет вставлено в область А1:В2 на место смещенных ячеек.
Вот полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E: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; end; procedure TForm1.Button3Click(Sender: TObject); //Заполним 1-ю строку и 3-й столбец begin E.ActiveSheet.Rows[1].Value:='123'; E.ActiveSheet.Columns[3].Value:='123'; end; procedure TForm1.Button4Click(Sender: TObject); //Вставка ячеек в область A1:B2 begin E.Application.Range['A1:B2'].Insert; end; end.
В заключение отметим, что единственный необязательный параметр метода Delete может принимать следующие значения:
Если параметр не указан, то его значение считается равным xlShiftToLeft.
Аналогично, для метода Insert первый необязательный параметр может принимать следующие значения:
Если параметр не указан, то его значение считается равным xlShiftDown.
На следующем шаге мы рассмотрим поиск и земену текста.