Шаг 119.
Автоматизация Microsoft Excel. Работа с объектом Excel.Application. Доступ к рабочей книге

    На этом шаге мы рассмотрим организацию доступа к рабочей книге.

    После того как мы открыли и создали несколько рабочих книг в приложении Excel, можно перейти к анализу содержимого коллекции WorkBooks. Объекты Item(i:integer) содержат ссылки на все рабочие книги коллекции WorkBooks (i:integer - индекс книги в коллекции). В качестве аргумента при обращении к Item может выступать и строковая переменная, содержащая имя книги. Свойство Count коллекции содержит количество открытых документов коллекции. Используя эти свойства коллекции, мы можем вывести список всех рабочих книг и перейти к работе с любой из них. Для этого рассмотрим следующие процедуры.

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;

    С помощью этих процедур мы можем вывести список всех рабочих книг и отобразить их имена в объекте ListBox (список). Затем, перебирая содержимое списка, активируем любую из открытых рабочих книг и получаем ссылку на нее для последующего доступа к этой рабочей книги (рисунок 1).


Рис.1. Выбор рабочей книги в списке

    Для активизации рабочей книги из списка открытых используем метод Activate объекта Item(i:integer), где i - индекс открытой рабочей книги, а объект Item(i:integer) представляет собой ссылку на рабочую книгу.

    В заключение приведем полный текст приложения.

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;
    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);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  E:variant;
  WBS:variant;
  WB:variant;

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;

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

    На следующем шаге мы рассмотрим сохранение рабочей книги.




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