0

有人可以帮忙吗?

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

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

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

有人告诉我,解决方案是将预设组件 OpWord 和 OpDataSet 替换为 Ole 变体。我已经使用 OpWord 这样做了:

wrdApp := CreateOleObject('Word.Application');

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

或者任何人都可以提出比我正在尝试的解决方案更好的解决方案。我对德尔福很陌生,所以我有点过头了

编辑:(要求的信息)

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

这些组件似乎与 TOpExcel、TOpOutlook 等一起属于名为 OfficePartner 的库。

.doc 是从 Form30 上的弹出 ListPane 中选择的,打开并填充了表 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;

我希望这有帮助...

4

1 回答 1

1

这是我在 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;
于 2011-07-05T09:50:28.887 回答