我继承了一些用Delphi5编写的软件,它允许将数据库(.ADT文件(中的成员数据和字段合并到word中。
它适用于除2010年以外的所有版本的Word,在2010年,它不会加载任何文档并显示错误:
"该方法在该对象上不可用">
有人告诉我,解决方案是用Ole变体替换预设组件OpWord和OpDataSet。我已经用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;
我希望这能帮助。。。
这是我在D6中使用的单词邮件合并的一个小过程,它只是一个片段,你必须包含在一些类中,我不再有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;