Просмотрим процесс выгрузки данных в MS Excel из базы данных.
Для этого создадим новый проект.
На форму помещаем следующие объекты управления:
- TabbedNotebook - является как бы соединением двух компонентов: пачки панелей (страниц) NoteBook и набора закладок TabSet. Эти два компонента могут использоваться и раздельно. Компонент TabSet во многом аналогичен рассмотренному ранее 32-разрядному компоненту TabControl. Это многопозиционный управляющий элемент, который сам по себе не имеет никакой панели. Его основное свойство — Tabs типа TStrings. Задавая строки этого свойства вы тем самым определяете число закладок и их надписи. Свойства StartMargin и EndMargin определяют поля — расстояния крайних закладок от краев компонента. Сами закладки всегда направлены вниз. Поэтому компонентTabSet надо располагать внизу управляемого им компонента. Свойство AutoScroll определяет появление кнопок при большом количестве закладок, которые позволяют пользователю прокручивать полосу закладок, как это делается в компонентах PageControl и TabControl при MultiLine = false. Индекс выбранной закладки определяется свойствомTabIndex, значение которого можно устанавливать и можно читать в обработчике события OnChange, происходящего при смене пользователем закладки и идентичного такому событию в компоненте TabbedNoteBook.
Компонент NoteBook является пачкой панелей, имена и количество которых определяются свойством Pages, как в компоненте TabbedNoteBook. Индекс выбранной страницы определяется свойством PageIndex. В этом компоненте отсутствует управляющий элемент — закладки. Так что страницы можно переключать какими-то кнопками, переключать их в зависимости от действий пользователя, в зависимости от отображаемых данных и т.п. Компоненты NoteBook и TabSet могут быть, конечно, объединены программно в компонент, аналогичный TabbedNoteBook. Для этого достаточно в обработчик события OnChange компонента TabSet вставить оператор
Notebook1.PageIndex := NewTab;
- на объект TabbedNotebook помещаем объект DBGrid с вкладки Data Controls
- два объекта Button (кнопка) с вкладки Standard и присваиваем им новые имена, соответственно: Button1 – BtnDB с заголовком «Выбрать базу данных», Button2 – BtnExport с заголовком «Экспорт базы данных в Excel»;
- OpenDialog с вкладки Dialog;
- TableDB, являющийся объектом Table с вкладки BDE;
- DataSource с вкладки Data Access.
В объект DBGrid будет переноситься база выбранная база данных при нажатии кнопки BtnDB.
На кнопку BtnDB назначаем выполнение процедуры:
procedure TForm1.BtnDBClick(Sender: TObject);
begin
if OpenDialog.Execute
then
begin
TableDB.Active:=false;
TableDB.TableName:=OpenDialog.FileName;
TableDB.Active:=true;
end;
end;
На открытие формы определяем выполнение следующей процедуры:
procedure TForm1.FormCreate(Sender: TObject);
begin
OpenDialog.InitialDir:=ExtractFilePath(Application.ExeName);
end;
А на кнопку BtnExport:
procedure TForm1.BtnExportClick(Sender: TObject);
var
XL, XArr: Variant;
i: Integer;
j: Integer;
begin
{не забудьте включить ComObj в список используемых модулей}
// Создаем массив элементов, полученных в результате запроса
XArr:=VarArrayCreate([1,TableDB.FieldCount],varVariant);
XL:=CreateOLEObject('Excel.Application'); // Создание OLE объекта
XL.WorkBooks.add;
XL.visible:=true;
j := 1;
TableDB.First;
while not TableDB.Eof do
begin
i:=1;
while i<=TableDB.FieldCount do
begin
XArr[i] := TableDB.Fields[i-1].Value;
i := i+1;
end;
XL.Range['A'+IntToStr(j),
CHR(64+TableDB.FieldCount)+IntToStr(j)].Value := XArr;
TableDB.Next;
j:=j+1;
end;
XL.Range['A1',CHR(64+TableDB.FieldCount)+IntToStr(j)].select;
// XL.cells.select; // Выбираем все
XL.Selection.Font.Name:='Arial cur';
XL.Selection.Font.Size:=10;
XL.selection.Columns.AutoFit;
XL.Range['A1','A1'].select;
end;
Комментариев нет:
Отправить комментарий