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

    На этом шаге мы рассмотрим основные операции над ячейками.

    На прошлых шагах мы рассмотрели только манипуляции с содержимым ячеек, при этом сами ячейки оставались неизменными, т. е. их другие характеристики не менялись. Если бы ячейка имела заливку и линии границы, то изменение или даже полная очистка ее содержимого не повлияла бы на ее другие визуальные характеристики - они остались бы неизменными. Радикальный способ, позволяющий полностью изменить ячейку по определенному адресу, - это удаление ячейки или вставка на ее место другой. При этой манипуляции происходит смещение остальных ячеек к началу или к концу в зависимости от выбранной операции над ячейками. Для удаления ячейки предназначен метод 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.
Текст этого приложения можно взять здесь (5,8 Кб).

    В заключение отметим, что единственный необязательный параметр метода Delete может принимать следующие значения:

    Если параметр не указан, то его значение считается равным xlShiftToLeft.

    Аналогично, для метода Insert первый необязательный параметр может принимать следующие значения:

    Если параметр не указан, то его значение считается равным xlShiftDown.

    На следующем шаге мы рассмотрим поиск и земену текста.




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