1

フォーム コンポーネントの代わりに oleobject を作成することで、Delphi メンバーシップ アプリケーションを word2010 で自動化しようとしています。

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 の試用版で、メンバーシップ データベースからの単一および複数の差し込み印刷の両方で魅力的に機能します。

ただし、完全な Word2010 バージョンを搭載した PC でテストしたところ、次のエラーが表示されました。

「現在の差し込み印刷のメイン文書にはデータ ソースが必要なため、このメソッドまたはプロパティは使用できません」

一時データソースは正しく設定されているようですが、テンプレート ドキュメントでは使用できないようです...

なぜこれが起こっているのか、または完全版と試用版で自動化に違いがある理由について何か手がかりを持っている人はいますか. もしかしたらプラグインで解決できるかも?

どうもありがとう

編集: 以下は私の CreateMergeDataFile 関数です:

  procedure TForm1.CreateMailMergeDataFile;
var
  wrdDataDoc : Variant;
begin
// Open a data source from C:\Leisure\Membership\Documents 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;

また、このコードは、以前に作成された word.application によって決定された msword のバージョンが 14.0 (2010) である場合にのみ実行されます。これを終了する必要はないと言われました。

4

1 に答える 1

1

閉鎖のためだけに解決策があります...

理由はわかりませんが、セットアップによっては、ドキュメントを再度開いて編集した後などに、データソースがドキュメントから切り離されているようです。

保存後、マージが実行される前に、データソースを再度開くためのコード行を追加しただけです。御馳走を働きます。

助けてくれてありがとう

于 2011-08-19T11:01:18.720 に答える