IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Экспорт отчетов из Access в Excel (https://www.imho.ws/showthread.php?t=55828)

PLP 06.04.2004 22:14

Экспорт отчетов из Access в Excel
 
Приветствую. Появилась необходимость экспортировать готовые отчеты из Access в Excel. подскажите как это можно сделать? Может быть не напрямую, если нельзя, а через таблицы? Заранее благодарен.

/7y3uK 07.04.2004 00:48

Если Delphi или Builder, то пользуй технологию ADO - Быстро и просто.

Для Delphi:

procedure TMainForm.ExcelExportTBClick(Sender: TObject); //жмем на кнопку
var
XLApp,Sheet,Colum:Variant;
index,i,j:Integer;
begin
XLApp:= CreateOleObject('Excel.Application'); // создаем ексельник рантайм
XLApp.Visible:=true;
XLApp.Workbooks.Add(-4167); // смотри ExcelXP.pas
XLApp.Workbooks[1].WorkSheets[1].Name:='Название листа'; // название листа Excel
Colum:=XLApp.Workbooks[1].WorkSheets['Название листа'].Columns; //засовываем в переменную указатель на столбцы
for i:=0 to WorkersGrid.FieldCount-1 do // есть ADO таблица, заполняемая по запросу, проходим до кол-ва записей - 1
Colum.Columns[i+1].ColumnWidth:=WorkersGrid.Fields[i].DisplayWidth; // делаем столбцы
нужной ширины
Colum:=XLApp.Workbooks[1].WorkSheets['Название листа'].Rows; //засовываем в переменную указатель на строки
Colum.Rows[2].Font.Bold:=true; // во второй строке шрифт - жирный
Colum.Rows[1].Font.Bold:=true; // аналогично в первой
Colum.Rows[1].Font.Color:=clBlue; // в первой строке цвет шрифта - синий
Colum.Rows[1].Font.Size:=14; // в первой строке размер шрифта - 14
Sheet:=XLApp.Workbooks[1].WorkSheets['Название листа']; // засовываем в переменную указатель на страницу (лист)
Sheet.Cells[1,1]:='Че-нибудь'; //пишем в первую ячейку
Sheet.Cells[1,2]:='от '+DateToStr(Date); //пишем во второй столбец первой строки сегодняшнее число
for i:=0 to WorkersGrid.FieldCount-1 do //снова ADO проходим до количества записей
begin
Sheet.Cells[2,i+1].Borders.LineStyle:=$00000001; //т.к. в Excel нумерация с 1, а в Delphi с 0, то цикл соответственно... делаем рамку вокруг ячейки.
Sheet.Cells[2,i+1].Borders.Weight:=3; // ЖИРНУЮ!!
Sheet.Cells[2,i+1]:=WorkersGrid.Fields[i].DisplayName; //Пишем в ячейку данные
end;
DM.WorkersQ.First; //встаем на голову в ADO
index:=3; // третья строка
for i:=0 to DM.WorkersQ.RecordCount-1 do // снова в те же ворота
begin
for j:=0 to WorkersGrid.FieldCount-1 do // смотрим кол-во столбцов - опять - двадцать пять
begin
Sheet.Cells[index,j+1].Borders.LineStyle:=$00000001; // прямая линия (рамка)
Sheet.Cells[index,j+1]:=WorkersGrid.Fields[j].AsString; //вносим данные
end;
Inc(index); //соответственно инкремент (увеличение)
DM.WorkersQ.Next; //переходим на следующую запись в ADO
end;

Пример не претендует на изящность, зато все понятно, ну для тех кто понимает в Delphi или в Buildere,.... :)

Нужно подключить модули OleServer и ComObj.


Вопрос к знатокам!! (в частности к RaZEr-у :))
Просмотрел весь PAS-ник (ExcelXP.PAS), не нашел, где включатются колнтитулы. (хочу нумерацию страниц привыгрузке включить).
Не подскажете?

Добавлено через 4 минуты:
А что значит отчеты? Я тут задумался. :))

woo 09.04.2004 17:39

Есть стандартная операция...
Сервис - Связи с Office - Анализ в Microsoft Excel


Часовой пояс GMT +4, время: 18:09.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.