Экспорт данных в Excel из Access, используя ADO в Delphi
Теперь, самое время перейти к реализации экспорта наших данных в Microsoft Excel.
Подключим в раздел Uses две функции ActiveX и ComObj.
1) В разделе private пропишем две функции
1 |
function Install (AValue:String): boolean; |
и
1 |
function Run(AValue:String; var ADest:Variant):boolean; |
2) В разделе var объявим глобальные переменные
1 2 |
a, index:Integer; FExcel,Sheet,Colum:Variant; |
3) жмем Ctrl+Shift+C и для первой функции прописываем:
1 2 3 4 5 |
var Z:TCLSID; begin Result:=(CLSIDFromProgID(PChar(AValue),Z)=S_OK); end; |
4) А для второй
1 2 3 4 5 6 7 8 |
begin try ADest:=GetActiveOleObject(AValue); Result:=true; except Result:=false; end; end; |
5) Добавляем к настройкам столбцов и кнопок при открытии формы, в событие OnCreate формы следующее условие:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
begin if not Install('Excel.Application') then Application.MessageBox(PChar('Для корректной работы программы необходимо'+ 'иметь установленное приложение Microsoft Excel'#13#10+'Программа будет закрыта'), 'Ошибка', MB_ICONERROR); //Столбец ID отображать не будем; DBGridEh1.Columns.Items[0].Visible:=false; 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; //Кнопки 2,3,4 отображать тоже не будем; Button2.Visible:=False; Button3.Visible:=False; Button4.Visible:=False; end; |
6) И наконец, создаем обработчик событий на Button5, где записываем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
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’); там мы обнаружим «экселевский» файл, открыв который, мы увидим.