C# 如何在 Word Interop 中获取标题的自动编号

C# How to get automated number of heading in Word Interop

我有循环遍历所有段落并找到特定字符串的代码(如下所示)。当我找到该字符串时,我打印出它所属的 header 的自动编号。问题是,我也想要 header 号码,但不知道如何获得它。代码在这里:

编辑:使用有效内容清理代码

string LastHeader = "";

foreach (Paragraph paragraph in aDoc.Paragraphs)
{
    Microsoft.Office.Interop.Word.Style thisStyle = 
           (paragraph.Range.get_Style() as Microsoft.Office.Interop.Word.Style);
    if (thisStyle != null && thisStyle.NameLocal.StartsWith("Heading 2"))
    {
        LastHeader = paragraph.Range.ListFormat.ListString + " " + 
                        paragraph.Range.Text.Replace("\"", "\"\"").Replace("\r", "");
    }
    else
    { 
        string content = paragraph.Range.Text;

        for (int i = 0; i < textToSearch.Count; i++)
        {
            if (content.Contains(textToSearch[i]))
            {
                // Do stuff here
            }
        }
    }
}

每次我 re-read 你的信息我都觉得我没有完全理解你的问题,所以下面可能包含比你正在寻找的更多的信息.​​..

获取特定段落的编号:

paragraph.Range.ListFormat.ListString

Word 有一些 built-in 书签可以为您提供需要大量工作才能确定的信息。其中之一是 \HeadingLevel。这将获取在 SELECTION 之前使用 Heading 样式格式化的第一段。这是棘手的部分,因为我们真的不想做出选择……但它可以追溯到代码模仿用户操作的旧 WordBasic 时代,所以我们一直坚持下去。

textToAnalyse.Select
aDoc.Bookmarks("\HeadingLevel").Range.ListFormat.ListString

书签调用本身不会更改选择。

我看到的另一个选项是,因为您已经在循环 Paragraphs 集合,所以将检查 paragraph.Range.Style 并且如果它以字符串 "Heading" 开头(假设没有使用其他方式)在这些文档的样式中)保存 ListFormat.ListString 以便在满足条件时调用它。

不过,我确实想知道,为什么您要 "walking" 段落集合而不使用 Word 的 built-in 查找功能,因为那样会快得多。它可以搜索文本和(样式)格式。