用Word做Delphi報表輸出工具 (轉)

worldblog發表於2007-12-07
用Word做Delphi報表輸出工具 (轉)[@more@]

用做報表輸出工具 
整理編輯:China
 
  筆者在實際應用中發現,報表的內容一般很少變動,但其字型格式及版式是經常變動的,而且有時為了某種需要,不想修改的真實內容而又要改變報表內容。如果用ReportSmith可以解決前者問題,但對於後者則無能為力了,且其介面是英文的,不合使用者習慣。如果用3.0中的TQReport的報表部件,則兩者都不能實時解決,必須修改原始碼後重新編譯才能使用。而使用Word及則完全可以克服以上不足。具體實現如下(以Word實現為例):

  首先用Word編輯報表格式,並排好版,把將要輸出的資料項用表單域代替,並取名。這裡我們暫時假設有表單域Item1及Item2(均為文字型),將這個文件存為模板Example.dot,然後按如下步驟進行:

  1)執行Delphi3,在Form1里加入一個System部件集裡的TDdeClientCov部件,取名為DdeExample,將其ConnectMode設為ddeManual(手動方式);將DdeService設為‘(WinWord)’;將ServiceApplication設為‘WinWord’。

  2)編寫一個自定義過程,以啟用Word,如下:
  procedure Tform1.WordActive(Cmds: TStrings);
  var
     WordPath: String;
  begin
     if(not DdeExample.OpenLink) then {判斷是否巳動態連結}
     begin
    if(FindWindow('OpusApp', nil)=0) then
    begin
    WordPath := 'C:mswinword';
     if(WordPath='') then
    ShowMessage('中文Word未或未設定路徑,請安裝設定Word中文 版。')
      else begin
    DdeExample.ServiceApplication := WordPath+'Winword.exe';
    if(DdeExample.OpenLink) then {如果巳動態連結宏命令}    
  DdeExample.ExecuteMacroLines(Cmds,False)
    else
  ShowMessage('無法啟動Word中文版!');
     DdeExample.ServiceApplication := 'WinWord.exe';
     end;
     end
    else begin{如果巳動態連結執行宏命令}
     DdeExample.ExecuteMacroLines(Cmds,False);
     end;
    end
    else
     DdeExample.ExecuteMacroLines(Cmds,false);
  end;

  在private宣告區里加入如下:
  procedure ActiveWord(Cmds: TStrings);

  3)在Form1中加入一個按鈕Button1,在其onclick事件裡寫如下程式碼:
  procedure TForm1.Button1Click(Sender: T);
  var
    Cmds:TStringList;{建立Cmds}
    TempItem1,TempItem2:String;
  begin
    cmds:=TStringList.Create;
    cmds.Clear;
    TempItem1:='資料項一';
    TempItem2:='資料項二';
    with Cmds do
    begin
    Clear;
    Add('[FileNew.Template ="Example.Dot″]');{開啟模板檔案Example.Dot}
    Add('[AppMaximize]');{文件最大化}
    Add('[SetFormResult"Item1″,″'+TempItem1+'″]');{將資料TempItem1傳給表單域Item1}
    Add('[SetFormResult"Item2″,″'+TempItem2+'″]);{將資料TempItem2傳給表單域Item2}
    end;
    WordActive(DdeExample,Cmds);{自定義過程}
    Cmds.Free;{釋放Cmds}
  end;

  執行這個,單擊Button1,大家可以發現Word被啟動了,螢幕上出現了:資料項一;資料項二兩個資料項。最後,大家可以任意修改本報表的格式及資料,因為這時這個報表與具體的應用程式巳沒有關係了。

  本例中用的是中文Word6或中文Word7。由於Word97的宏命令巳變為語句,如大家想用Word97實現,請將其宏命令改變為相應的程式碼。

  這是個簡單的示例,大家可以利用Word的宏錄製功能,錄取更多的宏(如自動生成表格、填充文字、變動字型等宏命令),並與資料庫的各種表聯絡起來,依次加入Cmds中即可實現您所要求的更復雜的功能。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989209/,如需轉載,請註明出處,否則將追究法律責任。

相關文章