首先用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被启动了,屏幕上出现了&ldquo:
数据项一”数据项二&rdquo两个数据项。