剪贴板暂无内容 利用剪贴板实现高速导出数据到Excel
利用剪贴板实现高速导出数据到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中的速度大大提高 我曾试过 在P M的机器上用普通的方法 导出 条数据大约需要 分钟 而该用本方法后只需要 秒
function ToExcel():boolean; var y :integer; tsList :TStringList; s :string; aSheet :Variant; begin result:=true; Excel Connect; // 打开Excel Excel Visible[ ]:=true; // 显示Excel Excel Workbooks Add(xlWBAorksheet ); aSheet:=excel Worksheets Item[ ];
tsList:=TStringList Create; 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+# ; Application ProcessMessages; end; tsList Add(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+# ; Application ProcessMessages; end; tsList Add(s); next; end; end; end; next; end; Close; end; Clipboard AsText:=tsList Text; except result:=false; end; finally tsList Free; end;

lishixinzhi/Article/program/Delphi/201311/25012