1

C# で word 2003 .DOT ドキュメントに対して MailMerge を実行する小さなライブラリを作成中です。次のように、すべてのドキュメント本文フィールドを取得して置き換えることができます。

foreach (Field mergeField in document.Fields)
    {
       if (mergeField.Type == WdFieldType.wdFieldMergeField)
       {
          string fieldText = mergeField.Code.Text;
          string fieldName = Extensions.GetFieldName(fieldText);

          if (values.ContainsKey(fieldName))
          {
             mergeField.Select();
             application.Selection.TypeText(values[fieldName]);
          }
       }
    }

ただし、これはドキュメントからヘッダー フィールドまたはフッター フィールドを取得しません。

私はこれを試しました:

   subscriptionDocument.Sections[1].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Fields.Count;

ヘッダー フィールドをクエリしますが、フィールドが物理的に存在するにもかかわらず、「0」のカウントが返されます。

ヘッダー フィールドとフッター フィールドにも目的の影響を与える方法はありますか?

4

2 に答える 2

0

コードは正しく、通常はヘッダー内のフィールドを数えることができます。あなたが扱っているテスト文書は、ヘッダーや最初のページのヘッダーなど、レイアウトが少し異なると思います。「wdHeaderFooterPrimary」を使用すると、セクションで「別の最初のページ」がアクティブになっている場合、最初のページではなくアクセスします。Word でテスト ドキュメントを開き、VBA エディター (Alt+F11) を起動して、イミディエイト ウィンドウに移動し、次のように入力します。

?activedocument.Sections(1).Headers(wdHeaderFooterFirstPage).Range.Fields.Count

最初のページ ヘッダーのフィールドにアクセスします。

于 2011-04-19T06:37:32.277 に答える