Шаг 120.
Автоматизация Microsoft Excel. Работа с объектом Excel.Application. Сохранение рабочей книги

    На этом шаге мы рассмотрим различные способы сохранения рабочей книги Excel.

    После того как рабочая книга выбрана, мы можем ее редактировать, сохранить под прежним или другим именем и закрыть. Для этого используем методы Save, Save As и Close.

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

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

    Метод SaveAs должен применяться, как минимум, с одним обязательным аргументом - именем файла, но может быть применен с несколькими аргументами, определяющими режим сохранения файла (таблица 1). Спецификация вызова метода приведена в справке по Visual Basic и имеет вид:

    SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, 
        CreateBackup, AddToMRU, TextCodePage, TextVisualLayout);

Таблица 1. Аргументы метода SaveAs
Имя Тип Назначение
FileName String Имя файла
FileFormat Integer Формат сохраняемого файла
Password String Пароль, который будет использоваться для открытия сохраненной рабочей книги
WriteResPassword String Пароль, который будет использоваться для записи изменений в открытую для редактирования рабочую книгу
ReadOnlyRecommended Boolean True - при открытии книги отображается сообщение о том, что файл может быть открыт только в режиме "для чтения"
CreateBackup Boolean True - создать резервный файл
AccessMode Integer Режим доступа к файлу
ConflictResolution Integer Реакция приложения на конфликт при записи книги
AddToMRU Boolean True - добавить имя записываемого файла в список недавно открытых файлов меню Файл
TextCodePage   Не используется
TextVisualLayout   Не используется

    После того как рабочая книга сохранена, можно закрыть ее, для этого используем метод Close объекта WorkBook. Для того чтобы закрыть сразу все открытые книги, используем метод Close коллекции WorkBooks. Перед тем как закрыть рабочую книгу, нелишне проверить - сохранена она или нет. Для этого используем свойство Saved объекта WorkBook. Значение Saved=True означает, что со времени последнего сохранения рабочая книга не была изменена, т. е. сохранять ее не нужно. В следующем примере мы проверяем, есть или нет изменения в книге, а затем закрываем ее.

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;

    Результат выполнения первой процедуры представлен на рисунке 1.


Рис.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;
    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);
  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;

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;

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

    Мы научились открывать рабочую книгу, сохранять ее и закрывать. Но перед тем, как сохранять, бывает нужно внести некоторые изменения. Это мы и рассмотрим далее.

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




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