среда, 23 октября 2013 г.

Экспорт данных в Excel из БД ADO Access 2 часть.


   Теперь, самое время перейти к реализации экспорта наших данных в Microsoft Excel. Подключим в раздел Uses две функции ActiveX и ComObj.



 1) В разделе private пропишем две функции:

 function Install (AValue:String): boolean; и
 function Run(AValue:String; var ADest:Variant):boolean;

 2) В разделе var объявляем глобальные переменные:

 a, index:Integer;  
 FExcel,Sheet,Colum:Variant;

 3) жмем Ctrl+Shift+C и для первой функции прописываем:

 var Z:TCLSID;
 begin
 Result:=(CLSIDFromProgID(PChar(AValue),Z)=S_OK);
 end;

 4) a для второй:

 begin 
 try 
 ADest:=GetActiveOleObject(AValue);
 Result:=true;
 except Result:=false;
 end; 
 end;

5) Добавляем к настройкам столбцов и кнопок при открытии формы, в событие OnCreate формы создаем следующее условие:

begin
if not Install('Excel.Application') then 
Application.MessageBox(PChar('Для корректной работы программы необходимо'+ 'иметь установленное приложение Microsoft Excel'#13#10+'Программа будет закрыта'), 'Ошибка', MB_ICONERROR); 
DBGridEh1.Columns.Items[0].Visible:=false; //Столбец ID отображать не будем; DBGridEh1.Columns.Items[1].Width:=100; DBGridEh1.Columns.Items[2].Width:=100; DBGridEh1.Columns.Items[3].Width:=100; DBGridEh1.Columns.Items[4].Width:=100; DBGridEh1.Columns.Items[5].Width:=200; Button2.Visible:=False; 
//Кнопки 2,3,4 отображать тоже не будем; Button3.Visible:=False; Button4.Visible:=False; 
end; 

 6) И наконец, создаем обработчик событий на Button5, где записываем:

begin 
try 
FExcel:=CreateOleObject('Excel.Application'); 
FExcel.Visible:=false; FExcel.Workbooks.Add(-4167); FExcel.Workbooks[1].WorkSheets[1].Name:='Отчет';  
Colum:=FExcel.Workbooks[1].WorkSheets['Отчет'].Columns; Colum.Columns[1].ColumnWidth:=20; 
Colum.Columns[2].ColumnWidth:=20; 
Colum.Columns[3].ColumnWidth:=20; 
Colum.Columns[4].ColumnWidth:=20; 
Colum.Columns[5].ColumnWidth:=20; 
Sheet:=FExcel.Workbooks[1].WorkSheets['Отчет']; 
Sheet.Cells[1,2]:='Персональные данные'; 
Sheet.Cells[2,1]:='Фамилия'; 
Sheet.Cells[2,2]:='Имя'; 
Sheet.Cells[2,3]:='Отчество';
Sheet.Cells[2,4]:='Телефон'; 
Sheet.Cells[2,5]:='Примечание'; 
index:=3; 
AdoTable1.First; 
for a := 0 to DBGrideh1.DataSource.Dataset.RecordCount -1 do 
begin 
Sheet.Cells[index,1]:=DBGrideh1.DataSource.DataSet.Fields[1].AsString; Sheet.Cells[index,2]:=DBGrideh1.DataSource.DataSet.Fields[2].AsString; Sheet.Cells[index,3]:=DBGrideh1.DataSource.DataSet.Fields[3].AsString; Sheet.Cells[index,4]:=DBGrideh1.DataSource.DataSet.Fields[4].AsString; Sheet.Cells[index,5]:=DBGrideh1.DataSource.DataSet.Fields[5].AsString; 
inc(index); 
DBGrideh1.DataSource.DataSet.Next; 
end; 

FExcel.Workbooks[1].SaveAs('C:\Users\Администратор\Documents\RAD Studio\Projects\Телефонный справочник\эксель.xlsx'); 
finally 
if not VarIsEmpty(FExcel) then 
begin FExcel.DisplayAlerts:=false; 
FExcel.Quit; FExcel:=Unassigned; 
end; 
end; 
end; 

   Вот собственно и все. Запускаем проект, заполняем нашу таблицу случайными данными, жмем на Экспорт в Excel и вуаля!!! Теперь, если мы перейдем по адресу указанному в FExcel.Workbooks[1].SaveAs ('C:\Users\Администратор\Documents\RAD Studio\Projects\Телефонный справочник\эксель.xlsx'); то будем приятно удивлены, обнаружив там экселевский файлик. Но будет гораздо больше восторга если мы его откроем. Как видим все данные из Access были корректно перенесены и сохранены в файл MS Excel. Удачных экспериментов!!!

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.