数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

利用剪贴板实现高速导出数据到Excel


发布日期:2022年08月03日
 
利用剪贴板实现高速导出数据到Excel

在很多的时候我们需要将我们的数据导出到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;

               

上一篇:保存数据当ADO循环删除数据时需要注意的问题

下一篇:Delphi、MS SQL Server开发环境下存储过程的使用