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技术如何了。