Search code examples
c#ms-wordoffice-interop

Word Interop - How to determine if a word doc has page number in Header/footer


I want to know if a Word Document has page number in the Header/Footer using Interop.Word in C#.

I have gone this far

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) { }

But the checks cannot determine if it is Page number or not. What should I do to determine if it has page numbers?


Solution

  • You should check the Header and the Footer of Section using the PageNumbers.Count propertie.

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

    And you can call this like...

            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);
            }