c# - Word Interop - 如何确定 Word 文档的页眉/页脚中是否有页码

标签 c# ms-word office-interop

我想使用 C# 中的 Interop.Word 了解 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) { }

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

最佳答案

您应该使用 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);
        }

关于c# - Word Interop - 如何确定 Word 文档的页眉/页脚中是否有页码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39959088/

相关文章:

c# - 最大长度输入属性的最大长度注释

java - 使用 JACOB (Java) 保存 Word 文档

vb.net - 更好的方法来重读Word文档中的每个单词?

asp.net - ApplicationClass Documents.Open 为 64 位系统上的 ASP.NET 站点返回 null

c# - 读取单色位图像素颜色

c# - 在 Monotouch 中检测 UIPageViewController 中控件的触摸事件

c# - 尝试编辑不存在的项目的最佳实践?

java - 使用 Apache Poi 解析 word 文档中表中的表

c# - 使用 C#.NET 将 MS Word 2007 中的粗体文本替换为 <b>文本</b>

c# - 在服务器上安装了 Word 但找不到它以在组件服务中设置权限