0

誰でも助けることができますか?

私は Delphi 5 で書かれたいくつかのソフトウェアを継承しました。これにより、メンバー データとデータベース (.ADT ファイル) のフィールドを Word に結合して使用できます。

ドキュメントが読み込まれず、エラーが表示される 2010 を除くすべてのバージョンの Word で正常に動作します。

「そのメソッドはそのオブジェクトでは使用できません」

解決策は、プリセット コンポーネントの OpWord と OpDataSet を Ole バリアントに置き換えることだと言われました。私は以下を使用して OpWord でこれを行いました。

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

ドキュメントが読み込まれるようになりましたが、差し込み項目データはありません。OpDataSet は単純にテーブルを指しているように見えるので、データベースからこのデータを抽出する方法を教えてもらえますか?

または、私が試しているものよりも優れた解決策を誰かが提案できますか。私はDelphiに非常に慣れていないので、頭を悩ませています

編集:(要求された情報)

申し訳ありませんが、必要に応じて詳細とコードがあります。

コンポーネントは、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 でずっと前に使用した単語メール マージの簡単な手順です。これは単なるスニペットであり、いくつかのクラスに含める必要があります。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 に答える