Delphi与Word真正的无缝连接
IT商界
Delphi中的许多报表控件基本上可以满足许多格式化文档的输出,但对于格式化要求较高的公文、合同处理来说,便显得力不从心了。但我们可以利用Delphi中的Servers组件的功能,来实现Delphi与Word的无缝连接,在不利用宏命令的情况下,实现完全按照公文的格式要求用Word模板输出。
一、创建Word模板。打开Word新建一个文档,按你所需要的模板格式(公文、合同、表格)排好版;在视图菜单下选择“工具栏→窗体→文字型窗体域”,添加到你需要替换内容的位置。
在这里我们以一个简单的通知来举例说明:选中第一个文字型窗体域,击右键选属性,在属性对话框中设置其书签名为gw1,选择所需字体,定义字体格式。以此类推,分别定义所需要替换的位置的文字型窗体域的书签名及排版格式。我们在这里设置书签名分别为gw2、gw3……将模板命名为Gwzj.dot并保存到工程所在目录下。
二、在Delphi中新建一工程,按需要加入一定数量的memo组件;加入一个WordApplication和WordDocument组件。
procedure TForm1.Button1Click(Sender: TObject);
var
Template,NewTemplate,ItemIndex,Fields:OleVariant;
Gwmb:OleVariant;
MyFormat:Word;
// Bitmap:TBitMap;
// AData:cardinal;
// APalette:hpalette; //导入图片SaveToClipBoardFormat函数所用的参数
begin
try
Template:=(ExtractFilePath(Applicatio n.Exename))+'Gwzj.dot';;
NewTemplate:=False;
ItemIndex:= 1;
try
Wordapplication1.Connect;
except
MessageDlg('无法连接,也许没有安装Word';mtError;[mbOk];0);
Abort;
end;
Wordapplication1.Visible:=True;
WordApplication1.Caption:= '公文专家';
//建立一个新文档
Template:=(ExtractFilePath(Application.Exename))+'Gwzj.dot';
// 是否将文档作为模板打开
NewTemplate:=false;
WordApplication1.Documents.Add old(Template,NewTemplate);
//建立WordDocument连接
WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));
//因为Word进行拼写检查需要很多时间,所以首先关闭检查
WordApplication1.Options.CheckSpellingAsY ouType:= False;
WordApplication1.Options.CheckGrammarAsY ouType:= False;
Fields:= worddocument1.Range.FormFields;//FormField.Item('gw1').result也可实现,但效果要差得多,你可以试一下!
Fields.Item('gw1').Range.Text:=memo1.Text;{memo1.Lines.Strings[0];//限定所要选取的memo的行数}
Fields.Item('gw2').Range.Text:=memo2.Text;
Fields.Item('gw3').Range.Text:=memo3.Text;
{Bitmap:= TBitmap.Create;
try
Bitmap.LoadFromFile('d:\Program Files\Com mon Files\Borland Shared\Images\Splash\256color\factory.bmp');
image1.Picture.SaveToClipBoardFormat(MyFor mat,AData,APalette);
ClipBoard.SetAsHandle(MyFormat,AData);
worddocument1.Range.Sentences.First.Paste;//Sentences.Item(1).Paste;
finally
Bitmap.Free;
end;}//用于把图片输入指定位置
except
on E:Exception do
begin
ShowMessage(E.Message);
WordApplication1.Disconnect;
end;
end;
end;
利用这一方法,你可以用Word输出任何固定格式的文档:公文、合同、常用表格等等。当然,如果你感觉设定模板太麻烦,你完全可以动态设定,不过这要看你掌握的Delphi技术与VBA技术如何了。