Шаг 124.
Автоматизация Microsoft Excel. Работа с объектом Excel.Application. Чтение и запись информации ячейки листа рабочей книги

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

    Для доступа к ячейкам можно использовать два разных объекта - объект типа Range, который ассоциируется с областью ячеек, или непосредственно объект Cell (ячейка листа рабочей книги). Если первый объект удобен для работы с целыми областями ячеек, то второй больше подходит для работы с отдельно взятой ячейкой. Эти объекты принадлежат объекту "лист" и требуют задания координат ячейки или области ячеек при обращении к ним. Например, для задания объекта, ассоциированного с областью ячеек A1:D5, используем следующий оператор:

    MyRange:=Sheet.Range[Al:D5];

где Sheet - ссылка на лист рабочей книги. После удачного выполнения данного оператора переменная MyRange: Variant содержит ссылку на объект, ассоциированный с выбранной областью ячеек. Другой вариант данного оператора:

    MyRange:= Е.Sheets.Item(1).Range('Al:D5');

    Здесь мы получаем ссылку на область ячеек первого листа рабочей книги. Обеспечить доступ к отдельной ячейке можно с помощью как объекта Range, так и объекта Cell. Использование последнего в операторе получения доступа к ячейке может выглядеть так:

    MyCell:=Sheet.Cells[1,1];

    При выполнении данного оператора переменная MyCell будет хранить ссылку на ячейку А1.

    Итак, мы получили доступ к ячейкам. Попробуем записать в них информацию из приложения на Delphi.

procedure TForm1.Button19Click(Sender: TObject);
//Запись информации в ячейки листа рабочей книги
var
  i:Integer;
begin
  randomize;
  for i:=1 to 100 do
    ST.Cells(i,1):=random(10000);
end;

    В данном примере переменная ST содержит ссылку на лист рабочей книги (эта переменная была инициализирована ранее). Результат выполнения процедуры представлен на рисунке 1.


Рис.1. Запись информации в ячейки и чтение из рабочей книги

    Если для записи в ячейки мы присваивали объекту Cells(row, column) значение, то для чтения данных используем оператор, в котором строковой переменной присваивается значение объекта Cells(row, column). В качестве примера импортируем значения ячеек рабочей книги, запишем их значения в объект ListBox3 и отобразим в форме.

procedure TForm1.Button20Click(Sender: TObject);
//Чтение информации листа рабочей книги Excel
var
  S:string;
  i:integer;
begin
  ListBox3.Items.Clear;
  for i:=1  to  100  do
  begin
    S:=ST.Cells [i,1];
    ListBox3.Items.Add(S);
  end;
end;

    Результат чтения данных также можно увидеть на рисунке 1.

    Приведем полный текст приложения.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    CheckBox1: TCheckBox;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    OpenDialog1: TOpenDialog;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    ListBox1: TListBox;
    Label1: TLabel;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    SaveDialog1: TSaveDialog;
    Button12: TButton;
    Label2: TLabel;
    ComboBox1: TComboBox;
    Button13: TButton;
    Button14: TButton;
    Label3: TLabel;
    ListBox2: TListBox;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    Button19: TButton;
    Button20: TButton;
    Label4: TLabel;
    ListBox3: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure ListBox2Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure Button20Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  E:variant;
  WBS:variant;
  WB:variant;
  ST:variant;
  Raspologenie: Integer; //Расположение окон

procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта Excel.Application
begin
  E:=CreateOleObject('Excel.Application');
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
//Отображение окна приложения Excel
begin
  E.Visible:=CheckBox1.Checked;
end;

procedure TForm1.Button2Click(Sender: TObject);
//Создание рабочей книги по умолчанию
begin
  E.WorkBooks.Add;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Создание рабочей книги на основе шаблона 1
const
  xlWBATChart=-4109;
begin
  E.WorkBooks.add(xlWBATChart);
end;

procedure TForm1.Button4Click(Sender: TObject);
//Создание рабочей книги на основе шаблона 2
begin
  if OpenDialog1.Execute then
    E.WorkBooks.add(OpenDialog1.FileName);
end;

procedure TForm1.Button5Click(Sender: TObject);
//Открытие существующей рабочей книги
begin
  if OpenDialog1.Execute then
    E.WorkBooks.Open(OpenDialog1.FileName);
end;

procedure TForm1.Button6Click(Sender: TObject);
//Открытие существующей рабочей книги в режиме "только для чтения"
begin
  if OpenDialog1.Execute then
    E.WorkBooks.Open(FileName:=OpenDialog1.FileName, ReadOnly:=True);
end;

procedure TForm1.Button7Click(Sender: TObject);
//Получение списка рабочих книг
var
  i:integer;
begin
  WBS:=E.WorkBooks;
  for i:=1 to WBS.Count do
    ListBox1.Items.Add(WBS.Item[i].Name+
       ';  '+WBS.Item[i].FullName);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
//Получение ссылки на выбранную рабочую книгу
begin
  WBS.Item[ListBox1.ItemIndex+1].Activate;
  WB:=WBS.Item[ListBox1.ItemIndex+1];
end;

procedure TForm1.Button8Click(Sender: TObject);
//Сохранение рабочей книги
begin
  WB.Save;
end;

procedure TForm1.Button9Click(Sender: TObject);
//Сохранение рабочей книги под новым именем
begin
  if SaveDialog1.Execute then
    WB.SaveAs(SaveDialog1.FileName);
end;

procedure TForm1.Button10Click(Sender: TObject);
//Проверка сохранения рабочей книги
begin
  if WB.Saved then
    MessageBox(handle,'Документ сохранен!','Внимание!',0)
  else
    MessageBox(handle,'Документ не сохранен!','Внимание!',0);
end;

procedure TForm1.Button11Click(Sender: TObject);
//Закрытие рабочей книги
begin
  WB.Close;
end;

procedure TForm1.Button12Click(Sender: TObject);
//Добавление нового окна для открытой рабочей книги
begin
  WB.NewWindow;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
//Выбор способа расположения окон
begin
   Case ComboBox1.ItemIndex Of
     0: Raspologenie:=7;
     1: Raspologenie:=-4128;
     2: Raspologenie:=1;
     3: Raspologenie:=-4166;
    End;
    WB.Windows.Arrange(ArrangeStyle:= Raspologenie,
        ActiveWorkbook:=True,SyncHorizontal:=True,
        SyncVertical:=True);
end;

procedure TForm1.Button13Click(Sender: TObject);
//Добавление нового листа перед указанным листом рабочей книги
begin
  WB.Sheets.Add(Before:=ST);
end;

procedure TForm1.Button14Click(Sender: TObject);
//Получение списка листов рабочей книги
var
  i:integer;
begin
  ListBox2.Items.Clear;
  for i:=1 to WB.Sheets.Count do
    ListBox2.Items.Add(WB.Sheets.Item[i].Name);
end;

procedure TForm1.ListBox2Click(Sender: TObject);
//Получение ссылки на лист рабочей книги
begin
  ST:=WB.Sheets.Item[ListBox2.ItemIndex+1];
end;

procedure TForm1.Button15Click(Sender: TObject);
//Переименование листа
begin
  ST.Name:='Привет!!!';
end;

procedure TForm1.Button16Click(Sender: TObject);
//Копирование рабочего листа и вставка его до оригинала
begin
  ST.Copy(before:=ST);
end;

procedure TForm1.Button17Click(Sender: TObject);
//Копирование рабочего листа и вставка его после оригинала
begin
  ST.Copy(after:=ST);
end;

procedure TForm1.Button18Click(Sender: TObject);
//Удаление выбранного листа с подавлением предупреждающего сообщения
begin
  E.DisplayAlerts:=False;
  ST.Delete;
  E.DisplayAlerts:=True;
end;

procedure TForm1.Button19Click(Sender: TObject);
//Запись информации в ячейки листа рабочей книги
var
  i:Integer;
begin
  randomize;
  for i:=1 to 100 do
    ST.Cells(i,1):=random(10000);
end;

procedure TForm1.Button20Click(Sender: TObject);
//Чтение информации листа рабочей книги Excel
var
  S:string;
  i:integer;
begin
  ListBox3.Items.Clear;
  for i:=1  to  100  do
  begin
    S:=ST.Cells [i,1];
    ListBox3.Items.Add(S);
  end;
end;

end.
Текст этого приложения можно взять здесь (11,1 Кб).

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




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