在很多的时候我们需要将我们的数据导出到Excel中进行加工在Access中有现成的工具可以实现可是在Delphi中却偏偏没有无论如何我们需要这么一个工具那么事不宜迟细细一想最好的方法莫过于直接在程序中按照Excel的格式生成Excel文件使用Ole技术直接调用Excel实例由于第一种方法技术实现过于复杂好在一般的计算机上已经安装了Office在此就第二种方法抛一块砖
在此做一个示例以方便说明我们考虑到导出数据有很多的情况是Master/Detail数据因此就用两个TQuery和一个TDataSource如果有更多的层次只需要增加TQuery和TDataSource即可以下使用了两个TQuery 分别是qryMaster和qryDetail一个TDataSource:dsSource;
步骤是
建立一个Excel实例
创建一个工作表
创建一个TStringList用来装数据
穷举数据表将数据存入TStringList
将TStringList的数据复制到剪贴板
把剪贴板中的数据粘贴到Excel
本方法的优点在于比逐条写入到Excel中的速度大大提高我曾试过在PM的机器上用普通的方法导出条数据大约需要分钟而该用本方法后只需要秒
function ToExcel():boolean;
var
y :integer;
tsList :TStringList;
s :string;
aSheet :Variant;
begin
result:=true;
ExcelConnect; // 打开Excel
ExcelVisible[]:=true; // 显示Excel
ExcelWorkbooksAdd(xlWBATWorksheet);
aSheet:=excelWorksheetsItem[];
tsList:=TStringListCreate;
try
try
with qryMaster do
begin
Open;
First;
While Not Eof do
begin
s:=;
for y:= to FieldCount do
begin
s:=s+Fields[y]AsString+#;
ApplicationProcessMessages;
end;
tsListAdd(s);
// 从表
if qryDetail<>nil then
begin
with qryDetail do
begin
Open;
First;
while Not Eof do
begin
s:=;
for y:= to FieldCount do
begin
s:=s+Fields[y]AsString+#;
ApplicationProcessMessages;
end;
tsListAdd(s);
next;
end;
end;
end;
next;
end;
Close;
end;
ClipboardAsText:=tsListText;
except
result:=false;
end;
finally
tsListFree;
end;
ExcelDisconnect;
aSheetPaste;
MessageBox(ApplicationHandle数据导出完毕!系统提示MB_ICONINFORMATION or MB_OK);
end;