在很多的时候,我们需要将我们的数据导出到Excel中进行加工,在Access中有现成的工具可以实现 可是在Delphi中却偏偏没有,无论如何我们需要这么一个工具,那么,事不宜迟,细细一想,最好的方法莫过 于直接在程序中按照Excel的格式生成Excel文件,使用Ole技术直接调用Excel实例,由于第一种方法技术实现 过于复杂,好在一般的计算机上已经安装了Office,在此就第二种方法“抛一块砖”。 在此做一个示例以方便说明,我们考虑到导出数据有很多的情况是Master/Detail数据,因此就用两个 TQuery和一个TDataSource,如果有更多的层次,只需要增加TQuery和TDataSource即可,以下使用了两个TQuery ,分别是:qryMaster和qryDetail,一个TDataSource:dsSource; 步骤是: 1.建立一个Excel实例 2.创建一个工作表 3.创建一个TStringList,用来装数据 4.穷举数据表,将数据存入TStringList 5.将TStringList的数据复制到剪贴板 6.把剪贴板中的数据粘贴到Excel 本方法的优点在于:比逐条写入到Excel中的速度大大提高,我曾试过,在P3933,256M的机器上用普通 的方法,导出1000条数据大约需要2分钟,而该用本方法后只需要8秒。
function ToExcel():boolean; var y :integer; tsList :TStringList; s :string; aSheet :Variant; begin result:=true; Excel.Connect; // 打开Excel Excel.Visible[0]:=true; // 显示Excel Excel.Workbooks.Add(xlWBATWorksheet,0); aSheet:=excel.Worksheets.Item[1];
tsList:=TStringList.Create; try try with qryMaster do begin Open; First; While Not Eof do begin s:=''; for y:=0 to FieldCount-1 do begin s:=s+Fields[y].AsString+#9; 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:=0 to FieldCount-1 do begin s:=s+Fields[y].AsString+#9; 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;
Excel.Disconnect; aSheet.Paste; MessageBox(Application.Handle,'数据导出完毕!','系统提示',MB_ICONINFORMATION or MB_OK); end;
作者相关作品: ◢█████◤ ◢◤ ◢◤ ◣ ◢◤ 凌 ◢◤ █◣ ◢◤ ◢◤ █◥◣◢◤ 丽 ◢◤ █ ◥◤ ◢◤ █ 软 ◢◤ http://wosens.com █ ◢◤ █ 件 ◢◤ ◥█████ █ ◢◤ ◥◣ █ ███◤ ◥███
======== 小燕子娱乐系列 ======== 《小燕子信使》 《小燕子字符画》 《小燕子方块》
======== 程序员工具箱系列 ======== 《内存清洁机》 《酷查询:CoolQuery》 《口令王:PasswordKing》 《凌丽邮件群发》 《SQL 数据库生成器》 《网页搅拌机》 《WinRoute日志分析》 《日记随手写》
======== 无敌商务系列 ======== 《无敌信使群发》 《无敌图像印章》 
|