Урок 18 Экспорт данных в Excel




Во время работы нам часто нужно вывести данные в Excel, в виде отчетов. Пусть у нас имеется некоторая таблица, которую нужно экспортировать в Excel. Создадим в Access БД с именем Склад. В этой БД создадим таблицу – Товары, следующей структуры (заполните таблицу данными 5-6 записей):

Выполним подключение таблицы в Delphi, с помощью компонентов ТADOConnection, ТADOTable, ТDataSource, ТDBGrid. На форме расположим кнопку ТButton, и компоненты для работы с Excel со страницы Servers: TExcelApplication,TExcelOLEObject, TExcelWorkbook.

В модуле запишите следующий код и разберите его:

 

unitUnit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, ComObj, DB, ADODB,

ExcelXP, OleServer;

type

TForm1 = class(TForm)

ADOConnection1: TADOConnection;

DataSource1: TDataSource;

DBGrid1: TDBGrid;

ADOTable1: TADOTable;

DBNavigator1: TDBNavigator;

Button1: TButton;

ExcelApplication1: TExcelApplication;

ExcelOLEObject1: TExcelOLEObject;

ExcelWorkbook1: TExcelWorkbook;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

XL, Cell1, Cell2, ArrayData, Sheet: Variant;

RowCount, sum: Integer;

BeginCol, BeginRow, i, ColCount: byte;

begin

// Координаты левого верхнего угла, куда будем выводить данные

BeginCol:= 1;

BeginRow:=3;

RowCount:=Form1.ADOTable1.RecordCount; //Кол-во записей в таблице, которую будем передавать в Excel

//ShowMessage(IntToStr(RowCount));

ColCount:=3; // Кол-востолбцов

XL:=CreateOleObject('Excel.Application'); // создание Excel

XL.Visible:=true;

XL.Application.EnableEvents:=false; //Отключаемреакцию Excel на события (позволяет ускорить вывод информации)

XL.WorkBooks.Add(-4167);// Добавляем книгу

XL.WorkBooks[1].WorkSheets[1].Name:='Îò÷åò';// имя листа

Sheet:=XL.WorkBooks[1].WorkSheets[1];

Sheet.Cells[1,1]:='Ассортимент товаров';

Sheet.Cells.HorizontalAlignment:=XLCenter;// выравнивание по центру

Sheet.Range['A1:C1'].Mergecells:=True;// объединениеячеек

Sheet.Range['A1:C1'].Interior.ColorIndex:=4;// заливка

XL.Rows.Rows[1].Font.Bold:=true;// Делаемжирныйшрифт в 1 строке

XL.Rows.Rows[2].Font.Size:=10; // Устанавливаем размер шрифта

XL.Rows.Rows[2].WrapText:=True; // Включаем перенос текста в ячейках

XL.Rows.Rows[2].HorizontalAlignment:=XLCenter; // Устанавливаем гориз-е выравнивание по центру

XL.Rows.Rows[2].VerticalAlignment:=2;// Устанавливаем верт-е выравнивание по центру

XL.Cells[2,1]:='Кодтовара';

XL.Cells[2,2]:='Наименование';

XL.Cells[2,3]:='Цена';

XL.Columns.Columns[1].ColumnWidth:=10;// Устанавливаем ширину столбцов

XL.Columns.Columns[2].ColumnWidth:=30;

XL.Columns.Columns[3].ColumnWidth:=20;

ArrayData:=VarArrayCreate([1,RowCount,1,ColCount],varVariant); // Задаем

// вариантный массив, который будем заполнять данными из ADOTable1

ADOTable1.First; // Заполняем массив значениями из ADOTable1

for i:=1 to RowCount do

begin

ArrayData[i,1]:= ADOTable1['КодТовара'];

ArrayData[i,2]:= ADOTable1['Название'];

ArrayData[i,2]:= ADOTable1['Цена'];

ADOTable1.Next;

end;

Cell1:=XL.Cells[BeginRow-1,BeginCol];// Верхняя левая ячейка области, в которую будем выводить данные

Cell2:=XL.Cells[BeginRow+RowCount-1,BeginCol+ColCount-1];//Правая нижняя ячейка области, в которую будем выводить данные

//XL.Range[XL.Cells[BeginRow,BeginCol],Cell2].Value:=ArrayData;// заполняем книгу нашими данными

XL.Range[Cell1,Cell2].Borders.LineStyle:=1; // границы

ADOTable1.First;

i:=0; sum:=0;

while not ADOTable1.Eof do //заполняемданными

begin

sheet.Cells(i+3,1):=ADOTable1.Fields[0].AsString;

sheet.Cells(i+3,2):=ADOTable1.Fields[1].AsString;

sheet.Cells(i+3,3):=ADOTable1.Fields[2].AsString; sum:=sum+StrToInt(ADOTable1.Fields[2].AsString);

inc(i);

ADOTable1.Next;

end;

sheet.Cells(i+3,2):='Èòîãî';

sheet.Cells(i+3,3):=sum;

//XL.WorkBooks[1].WorkSheets[1].Cells[2,6].formula:='=sum(c3:c5);

XL.Visible:=true;//делаем Excel видимым

end;

end.

В итоге у вас должен получится следующий отчет:

 

Самостоятельная работа.

Выполните подключение с помощью TADOQuery, подсчет итоговой суммы выполните с помощью запроса.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-23 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: