線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2485
推到 Plurk!
推到 Facebook!

用Word做Delphi報表輸出工具

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-08 11:43:56 IP:61.221.xxx.xxx 未訂閱
http://dhome.myrice.com/Tips/DLL&OtherTool/tip01-6.htm 用Word做Delphi報表輸出工具 筆者在實際應用中發現,報表的內容一般很少變動,但其字體格式及版式是經常變動的,而且有時用戶?了某種需要,不想修改資料庫的真實內容而又要改變報表內容。如果用ReportSmith可以解決前者問題,但對於後者則無能?力了,且其介面是英文的,不合用戶習慣。如果用3.0中的TQReport的報表部件,則兩者都不能即時解決,必須修改原代碼後重新編譯才能使用。而使用Word及Excel則完全可以克服以上不足。具體實現如下(以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:\msoffice\winword'; 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: TObject); 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的巨集命令巳變?Visual Basic語句,如大家想用Word97實現,請將其巨集命令改變?相應的代碼。 這是個簡單的示例,大家可以利用Word的宏錄製功能,錄取更多的巨集(如自動生成表格、填充文字、變動字體等巨集命令),並與資料庫的各種表聯繫起來,依次加入Cmds中即可實現您所要求的更複雜的功能。 -------------------------------------------------------------------------------- 中國電腦報社 版權所有 *************************************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-02 20:44:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!