用Word做Delphi報表輸出工具 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |