【问题标题】:Word Interop - How to determine if a word doc has page number in Header/footerWord Interop - 如何确定 word doc 在页眉/页脚中是否有页码
【发布时间】:2017-01-04 01:24:13
【问题描述】:

我想知道 Word 文档是否在 C# 中使用 Interop.Word 在页眉/页脚中具有页码。

我已经走了这么远

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

但检查无法确定它是否是页码。我该怎么做才能确定它是否有页码?

【问题讨论】:

    标签: c# ms-word office-interop


    【解决方案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);
            }
    

    【讨论】:

    • 谢谢。您是否知道任何可以让我了解更多 MS Office 文档属性的资源?
    • 此页面类似于基本参考link,但在 google 中您可以找到很多文档和示例。在 StackOverflow 中您会发现很多问题,但在 Code Project link 和特别是在 Addin express 论坛 link 中您会发现很多关于它的问题。 @naqushab
    猜你喜欢
    • 1970-01-01
    • 2017-03-25
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2017-08-01
    相关资源
    最近更新 更多