На этом шаге мы рассмотрим способы добавления листов и получение списка листов рабочей книги.
Лист, ячейки которого непосредственно хранят информацию, является принадлежностью книги. В рабочей книге может быть больше одного листа. Как получить доступ к списку листов или к любому листу рабочей книги? Ответ: с помощью коллекции Sheets. Как и любая коллекция, она содержит свойство Count: Integer (количество элементов коллекции) и набор объектов Item(i: Integer) - собственно листы, где i - индекс выбранного листа (от 1 до Count). Некоторые методы коллекции Sheets:
Рассмотрим метод Add подробнее. Его можно использовать как без аргументов, так и с аргументами, определяющими место, куда будут добавлены листы (лист), их количество и тип. Если использовать метод Add так, как показано в следующем примере, то будет добавлен лист перед листом, ссылка на который находится в переменной ST типа Variant.
procedure TForm1.Button13Click(Sender: TObject); //Добавление нового листа перед указанным листом рабочей книги begin WB.Sheets.Add(Before:=ST); end;
Добавив листы или просто открыв или создав рабочую книгу, мы можем получить список листов и доступ к любому листу рабочей книги. Для этого используем уже известные свойства коллекции Sheets.
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;
Результат работы приложения изображен на рисунке 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; Button12: TButton; Label2: TLabel; ComboBox1: TComboBox; Button13: TButton; Button14: TButton; Label3: TLabel; ListBox2: 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); 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; end.
На следующем шаге мы закончим изучение этого вопроса.