На этом шаге мы рассмотрим переименование, копирование и удаление листов рабочей книги.
После загрузки списка листов мы можем получить доступ к любому листу для работы с ним. Для начала попробуем изменить непосредственно свойства самого листа, например его имя. Имя листа представляет собой строку и содержится в свойстве Name объекта Sheet. Для того чтобы переименовать выбранный рабочий лист, запишем в свойство Name новое значение имени листа, например:
procedure TForm1.Button15Click(Sender: TObject); //Переименование листа begin ST.Name:='Привет!!!'; end;
Результат выполнения этой процедуры представлен на рисунке 1.
Рис.1. Переименование третьего листа
Мы можем скопировать лист и его содержание с помощью метода Сору объекта Sheet. Этот метод позволяет копировать лист и вставлять копию или до или после оригинала - это зависит от значения аргумента метода Сору. Вот пример использования этого метода в процедурах, разработанных в среде Delphi.
procedure TForm1.Button16Click(Sender: TObject); //Копирование рабочего листа и вставка его до оригинала begin ST.Copy(before:=ST); end; procedure TForm1.Button17Click(Sender: TObject); //Копирование рабочего листа и вставка его после оригинала begin ST.Copy(after:=ST); end;
Результат выполнения этих процедур может быть таким, как показано на рисунке 2, при этом копируется не только содержание листа, но и все его настройки.
Рис.2. Создание копий листа рабочей книги
После работы с книгой может понадобиться удалить некоторые листы. Для этого предназначен метод Delete объекта Sheet. Если попытаться с его помощью удалить выбранный лист, то приложение выведет на экран предупреждающее сообщение, в котором говорится о невозможности отмены операции удаления листа рабочей книги. Блокировать данное сообщение и другие сообщения приложения позволяет следующий оператор:
Е.DisplayAlerts:=False;
Следующая процедура удаляет лист, подавив предупреждающие сообщения приложения.
procedure TForm1.Button18Click(Sender: TObject); //Удаление выбранного листа с подавлением предупреждающего сообщения begin E.DisplayAlerts:=False; ST.Delete; E.DisplayAlerts:=True; end;
Вот полный текст получившегося приложения.
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; 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); 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; end.
На следующем шаге мы рассмотрим работу с ячейками листа рабочей книги.