2011-04-18 8 views
0

C#の単語2003 .DOT文書でMailMergeを実行する小さなライブラリを作成中です。Mail Merge Word 2003ヘッダーフィールドC#

:私はこれを試してみました。..

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"に戻っています。

ヘッダーフィールドとフッターフィールドにも同様の効果が得られますか?

答えて

1

あなたのコードは正しいですし、通常はそれを使ってヘッダ内のフィールドを数えることができます。 作業しているテストドキュメントのレイアウトが少し違うと思います。ヘッダーまたは最初のページヘッダー。 "wdHeaderFooterPrimary"を使用すると、セクション内で "First First Page"が有効になっている場合は、最初のページにアクセスしません。 、Wordでテスト文書を開き、VBAエディタ(Altキー+ F11)を立ち上げて、即時のWindowsに移動し、最初のページのヘッダー内のフィールドにアクセスするために

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

を入力します。

+0

入力いただきありがとうございます。私はドキュメントのVBAエディタでこのスクリプトを試してきましたが、まだ0のカウントが返ってきていますので、これは私が使用している正確なドキュメントのアーティファクトかもしれません。ドキュメントを再作成して、そのような問題を回避できるかどうかを確認します。 –

+0

これは、このような場合には常に良いappproachです(コードが正しいと思われる場合は、ドキュメントが原因である可能性があります)。 –

関連する問題