熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

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

2013-11-23 17:45:00  來源: Delphi編程 

  在很多的時候我們需要將我們的數據導出到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中的速度大大提高我曾試過在PM的機器上用普通的方法導出條數據大約需要分鐘而該用本方法後只需要

function ToExcel():boolean;
var
    y       :integer;
    tsList  :TStringList;
    s       :string;
    aSheet  :Variant;
begin
    result:=true;
    ExcelConnect;                  // 打開Excel
    ExcelVisible[]:=true;         // 顯示Excel
    ExcelWorkbooksAdd(xlWBATWorksheet);
    aSheet:=excelWorksheetsItem[];

    tsList:=TStringListCreate;
    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+#;
                        ApplicationProcessMessages;
                    end;
                    tsListAdd(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+#;
                                    ApplicationProcessMessages;
                                end;
                                tsListAdd(s);
                                next;
                            end;
                        end;
                    end;
                    next;
                end;
                Close;
            end;
            ClipboardAsText:=tsListText;
        except
            result:=false;
        end;
    finally
        tsListFree;
    end;

    ExcelDisconnect;
    aSheetPaste;
    MessageBox(ApplicationHandle數據導出完畢!系統提示MB_ICONINFORMATION or MB_OK);
end;


From:http://tw.wingwit.com/Article/program/Delphi/201311/25012.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.