2016-10-10 4 views
1

Word文書にC#のInterop.Wordを使用してヘッダー/フッターにページ番号があるかどうかを知りたい。Word Interop - Word docにヘッダー/フッターのページ番号があるかどうかを調べる方法

私はこれまでのところ

try 
{ 
    foreach (Section SectionObj in DocObj.Sections) 
    {   
     foreach (HeaderFooter HeaderObj in SectionObj.Footers) 
     { 
      if (HeaderObj.Exists && (HeaderObj.Shapes.Count > 0 || !(string.IsNullOrEmpty(HeaderObj.Range.Text) || HeaderObj.Range.Text.Equals("\r")))) 
      { 
       if(HeaderObj.PageNumbers.NumberStyle == WdPageNumberStyle.wdPageNumberStyleNumberInDash 
       || HeaderObj.PageNumbers.NumberStyle == WdPageNumberStyle.wdPageNumberStyleUppercaseLetter 
       || HeaderObj.PageNumbers.NumberStyle == WdPageNumberStyle.wdPageNumberStyleUppercaseRoman 
       || HeaderObj.PageNumbers.NumberStyle == WdPageNumberStyle.wdPageNumberStyleNumberInCircle 
       || HeaderObj.PageNumbers.NumberStyle == WdPageNumberStyle.wdPageNumberStyleLowercaseRoman 
       || HeaderObj.PageNumbers.NumberStyle == WdPageNumberStyle.wdPageNumberStyleLowercaseLetter 
       || HeaderObj.PageNumbers.NumberStyle == WdPageNumberStyle.wdPageNumberStyleHindiLetter1) 
       { 
        PageNumber = true; 
       } 
      } 
     } 
    } 
} 
catch (Exception e) { } 

を行っている。しかし、それはページ番号であるかないかどうかを確認するには判断できません。ページ番号があるかどうかを判断するにはどうすればよいですか?

答えて

1

PageNumbers.Countプロパティを使用して、セクションのヘッダーとフッターをチェックする必要があります。

private bool HeaderOrFooterHasPageNumber(Word.HeaderFooter headOrFooter) 
    { 
     if (headOrFooter != null) 
      return headOrFooter.PageNumbers.Count > 0; 
     else 
      return false; 
    } 

そして、あなたは、このような...

 bool hasNumberPages = false; 

     Word.Document doc = WordApp.ActiveDocument; 
     try 
     { 
      Word.HeaderFooter headOrFooter = null; 
      Word.Section section = null; 

      for (int i = 1; i <= doc.Sections.Count; i++) 
      { 
       try 
       { 
        section = doc.Sections[i]; 
        if(section != null) 
        { 
         headOrFooter = section.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary]; 
         hasNumberPages = HeaderOrFooterHasPageNumber(headOrFooter); 
         if (hasNumberPages) 
          break; 

         headOrFooter = section.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterEvenPages]; 
         hasNumberPages = HeaderOrFooterHasPageNumber(headOrFooter); 
         if (hasNumberPages) 
          break; 

         headOrFooter = section.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterFirstPage]; 
         hasNumberPages = HeaderOrFooterHasPageNumber(headOrFooter); 
         if (hasNumberPages) 
          break; 

         headOrFooter = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary]; 
         hasNumberPages = HeaderOrFooterHasPageNumber(headOrFooter); 
         if (hasNumberPages) 
          break; 

         headOrFooter = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterEvenPages]; 
         hasNumberPages = HeaderOrFooterHasPageNumber(headOrFooter); 
         if (hasNumberPages) 
          break; 

         headOrFooter = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterFirstPage]; 
         hasNumberPages = HeaderOrFooterHasPageNumber(headOrFooter); 
         if (hasNumberPages) 
          break; 
        } 
       } 
       finally 
       { 
        if(headOrFooter != null) 
        { 
         Marshal.ReleaseComObject(headOrFooter); 
         headOrFooter = null; 
        } 

        if (section != null) 
         Marshal.ReleaseComObject(section); 
       } 
      } 
     } 
     finally 
     { 
      if (doc != null) 
       Marshal.ReleaseComObject(doc); 
     } 
+1

感謝を呼び出すことができます。 MS Officeのドキュメントプロパティの詳細を知ることができるリソースをご存知ですか? – naqushab

+0

このページは基本的な参照[リンク](https://msdn.microsoft.com/en-us/library/dn320432.aspx)のようですが、Googleでは多くのドキュメントや例を見つけることができます。 StackOverflowでは多くの質問がありますが、Code Project [link](https://www.codeproject.com/)、特にAddin Expressフォーラム[link](https://www.add-in- express.com/forum/)あなたはそれについてたくさん見つけるでしょう。 @naqushab –

関連する問題