邮件合并在moffice 2010 vs试用版,与Delphi



我试图使我的Delphi成员应用程序自动化与word2010,通过创建一个oleobject而不是表单组件:

wrdApp := createoleobject('word.application');

打开邮件合并模板:

wrdDoc := wrdApp.Documents.Open('user definable template location')
wrdMailMerge := wrdDoc.MailMerge;

创建并填充一个名为DataDoc.docx的邮件合并,其中包含从成员数据库中提取的字段和数据。

CreateMailMergeDataDile;
PopulateMailMergeDataFile;

执行邮件合并:

wrdMailMerge.Destination := wdSendToNewDocument;
wrdMailMerge.Execute(False);

清理:

wrdDoc.Saved := True;
wrdDoc.Close(False);
DeleteFile(DataDoc.docx);

显示文字:

wrdApp.Visible := True;

在我的试用版Word2010上,无论是对会员数据库中的单个邮件还是多个邮件合并,这都非常有效。

然而,我刚刚在PC上测试了完整的Word2010版本,收到了错误:

"此方法或属性不可用,因为当前邮件合并主文档需要一个数据源"

临时数据源似乎正确填充,但模板文档似乎无法使用它…

有没有人知道为什么会发生这种情况,或者为什么完整版和试用版之间的自动化会有区别?也许它甚至可以通过一个插件来解决?

多谢下面是我的CreateMergeDataFile函数:

  procedure TForm1.CreateMailMergeDataFile;
var
  wrdDataDoc : Variant;
begin
// Open a data source from C:LeisureMembershipDocuments containing the field data
  If FileExists(DocumentDirectory+'..DataDoc.docx') then
  DeleteFile(DocumentDirectory+'..DataDoc.docx');
  CopyFile(PChar(DocumentDirectory+'..MergeFields.docx'),PChar(DocumentDirectory+'..DataDoc.docx'),True);
  wrdDoc.MailMerge.OpenDataSource(DocumentDirectory+'..DataDoc.docx',EmptyParam, EmptyParam, EmptyParam,
                             EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                             EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                             EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;

同样,此代码仅在msword版本为14.0(2010)时才被操作,该版本由先前创建的单词确定。

作为结语,我有一个解决方案…

我不知道为什么,但显然在某些设置下,数据源可以从文档中分离出来,也许在它被重新打开和编辑之后。

我只是添加了一行代码,以便在保存后和执行合并之前再次打开数据源。真是太棒了

Thanks for the help

最新更新