Delphi 5中的MS Word 2010邮件合并

Delphi 5中的MS Word 2010邮件合并,delphi,ms-word,mailmerge,Delphi,Ms Word,Mailmerge,有人能帮忙吗 我继承了一些用Delphi5编写的软件,它允许将数据库(.ADT文件)中的成员数据和字段合并到word中 它适用于除2010之外的所有版本的Word,该版本不会加载任何文档并显示错误: “该方法在该对象上不可用” 我被告知解决方案是用Ole变体替换预设组件OpWord和OpDataSet。我使用OpWord完成了以下操作: wrdApp:=CreateOleObject('Word.Application') 文档现在已加载,但没有任何合并字段数据。谁能告诉我如何从数据库中提取这些

有人能帮忙吗

我继承了一些用Delphi5编写的软件,它允许将数据库(.ADT文件)中的成员数据和字段合并到word中

它适用于除2010之外的所有版本的Word,该版本不会加载任何文档并显示错误:

“该方法在该对象上不可用”

我被告知解决方案是用Ole变体替换预设组件OpWord和OpDataSet。我使用OpWord完成了以下操作:

wrdApp:=CreateOleObject('Word.Application')

文档现在已加载,但没有任何合并字段数据。谁能告诉我如何从数据库中提取这些数据,因为OpDataSet似乎只是指向表

或者有人能提出比我正在尝试的更好的解决方案吗。我对德尔福很陌生,所以有点不知所措

编辑:(请求的信息)

抱歉,如果需要,我有更多的详细信息和代码

这些组件似乎属于一个名为OfficePartner的库以及TOpExcel、TOpOutlook等

.doc从Form30上的弹出列表窗格中选择,打开并填充表4中的合并字段数据。表1是成员数据库:

  {Use Table4 as we can Set a range on it}
  Table4.SetRange([Table1.FieldByName('Member Id').AsString],[Table1.FieldByName('Member Id').AsString]);

  {Open Word}
  OpWord1.Connected := True;

  {Open the Test Document}
  OpWord1.OpenDocument(DocumentDirectory + '\' + Form30.ListBox1.Items[Form30.ListBox1.ItemIndex]);

  {Populate the Test Document}
  OpWord1.ActiveDocument.MailMerge.OfficeModel := OpDataSetModel1;
  OpWord1.ActiveDocument.PopulateMailMerge;
  OpWord1.ActiveDocument.ExecuteMailMerge;

我希望这有帮助…

这是我在D6中使用的word邮件合并的一个小过程,它只是一个片段,您必须包含在某个类中,我不再有Delphi,因此无法编译以确保它工作,不管怎样,它在这里,希望它有帮助:

procedure MailMergeWord;
var
  WordApp: TWordApplication;
  WordDoc: TWordDocument;
  doc : WordDocument;
  FileName: OleVariant;
  xx: integer;
begin
  WordApp := TWordApplication.Create(nil);
  WordApp.ConnectKind := ckNewInstance;
  WordDoc := TWordDocument.Create(WordApp);
  FileName := 'TemplateDoc.doc';

  doc := WordApp.Documents.Open(FileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam
                                 ,EmptyParam,EmptyParam,EmptyParam,EmptyParam
                                 ,EmptyParam);

  WordDoc.ConnectTo(Doc);
  for xx := 1 to WordDoc.Fields.Count do
    WordDoc.Fields.Item(xx).Result.Text := OnWordVariable(WordDoc.Fields.Item(xx).Code.Text);
  WordDoc.PrintOut;
  WordDoc.Free;
  WordApp.Free;
end;


function OnWordVariable(varName: string): string;
begin
  Result := 'Value based on variable name';
end;

如果没有一些代码,也没有更好地指示OpWord和OpDataSet来自何处/哪个库(它们肯定不是标准的delphi5组件),那么这是任何人的猜测。演示如何创建各种COM对象(不仅仅是word应用程序),以及如何打开文档和/或启动合并。您好,感谢您的回复。抱歉,我不想写这么长的问题,但我在上面的编辑中包含了一些代码。谢谢你的输入。但是,我对对象及其属性的理解仍然让我失望,我看不出您的字段数据是如何在WordDoc.Fields中传递到模板的。此时,我正试图创建一个DataSourceFile,在其中我将从表中传递数据,但我与StringList混淆了。arghI我不确定我是否理解您的意思,但是,word文档“TemplateDoc.doc”中定义的所有字段都会调用OnWordVariable函数,OnWordVariable函数只是一个示例,您必须提供自己的逻辑,根据word文档中定义的字段名称填充word文档中的字段。不明白为什么要这样做DataSourceFile,让我们假设您的表的字段名与word中的字段名相同,所以您可以简单地这样做:Result:=table.FieldByName(“varName”).AsString;好极了谢谢安东尼奥。。。我的客户机模板wordvariables实际上与表中的字段名不匹配,因此我必须删除额外的下划线或创建新模板。如果这样做有效,我还有一个问题——当我的客户创建他们自己的模板并打开一个空白word文档时,我如何输入合并字段选项。我通过复制的sourcefile技术实现了这一点,但是有没有更简单的方法使用wrdDoc.Merge.Fields?非常感谢抱歉,我不知道,我总是使用预定义的模板,可能会问另一个问题,也许有人会知道我会解决这个问题,谢谢。不过还有一个问题-我遇到了错误:“Table4:Field'MERGEFIELD'Member ID'”未找到。它正在尝试搜索前面附加了“MERGEFIELD”的varName。我可以尝试删除字符串,但这是否发生在您身上?也许这是一个词2010的事情。。。