程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 利用剪貼板實現高速導出數據到Excel

利用剪貼板實現高速導出數據到Excel

編輯:Delphi
在很多的時候,我們需要將我們的數據導出到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日志分析》
  《日記隨手寫》

  ======== 無敵商務系列 ========
  《無敵信使群發》
  《無敵圖像印章》

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved