Теперь, самое время перейти к реализации экспорта наших данных в 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. Удачных экспериментов!!!
|