您现在的位置是:首页 >

剪贴板暂无内容 利用剪贴板实现高速导出数据到Excel

火烧 2022-05-21 02:17:54 1053
利用剪贴板实现高速导出数据到Excel   在很多的时候 我们需要将我们的数据导出到Excel中进行加工 在Acce 中有现成的工具可以实现 可是在Del hi中却偏偏没有 无论如何我们需要这么一个工

利用剪贴板实现高速导出数据到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;

剪贴板暂无内容 利用剪贴板实现高速导出数据到Excel
lishixinzhi/Article/program/Delphi/201311/25012  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码