首先用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:msOfficewinWord';
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中即可實現您所要求的更復雜的功能。