2011-04-18 2 views
0

C#의 2003 .DOT 문서에서 MailMerge를 수행하는 작은 라이브러리를 작성하는 중입니다. 그래서 같은 문서 본문의 모든 필드를 검색하고 대체 할 수 있어요 :편지 병합 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"를 사용하면 섹션에서 "다른 첫 페이지"가 ​​활성화 된 경우 첫 페이지가 아닌 페이지에 액세스 할 수 있습니다. , Word에서 테스트 문서를 열고 VBA 편집기 (Alt + F11)를 불 , 직접 윈도우로 이동

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

첫 페이지 헤더의 필드에 액세스하기 위해 입력합니다.

+0

입력 해 주셔서 감사합니다. 문서의 VBA 편집기에서이 스크립트를 시도했지만이 카운트는 0이 반환되었으므로 사용중인 정확한 문서의 아티팩트 일 수 있습니다. 문서를 다시 작성하고 그런 식으로 문제를 해결할 수 있는지 알아 봅니다. –

+0

이 경우 항상 좋은 appproach입니다 (코드가 정확하면 문서가 범인이 될 수 있습니다). –