| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 16.07.2002
Сообщения: 113
![]() |
Экспорт отчетов из Access в Excel
Приветствую. Появилась необходимость экспортировать готовые отчеты из Access в Excel. подскажите как это можно сделать? Может быть не напрямую, если нельзя, а через таблицы? Заранее благодарен.
|
|
|
|
|
# 2 |
|
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
Если 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 минуты: А что значит отчеты? Я тут задумался. )
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах Последний раз редактировалось /7y3uK; 07.04.2004 в 00:46. |
|
|