WEB开发网
开发学院软件开发Delphi 利用剪贴板实现高速导出数据到Excel 阅读

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

 2006-02-04 13:37:04 来源:WEB开发网   
核心提示: 在很多的时候,我们需要将我们的数据导出到Excel中进行加工,利用剪贴板实现高速导出数据到Excel,在access中有现成的工具可以实现可是在Delphi中却偏偏没有,无论如何我们需要这么一个工具,256M的机器上用普通的方法,导出1000条数据大约需要2分钟,那么,事不宜迟
 在很多的时候,我们需要将我们的数据导出到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日志分析》
《日记随手写》

======== 无敌商务系列 ========
《无敌信使群发》
《无敌图像印章》

Tags:利用 剪贴板 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接