在c#中使用互操作PIA从MS Word页眉和页脚获取所有行

本文关键字:获取 Word MS 互操作 PIA | 更新日期: 2023-09-27 17:54:15

我试图从一个word文档的页眉和页脚获得所有行。我使用以下代码:

HeaderFooter header = this.Doc.Sections[1].Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary]
string text = header.Range.Text;

但是Range.Text属性似乎总是返回最后一行。如果我的标题有:

第一行

标题第2行

标题第3行

我的代码总是返回"Header line 3"。对于页脚,我得到了类似的结果。我试过打header.Range.WholeStory()。我已经尝试调用header.Range.Paragraphs并尝试迭代Paragraphs集合。我完全不知所措。MSDN上的文档是神秘的,我找不到我的方式通过它。如有任何帮助,不胜感激。

fww:我正在用c#编写一个实用程序来验证每个文档(一个大型word文档库)是否符合公司范围的模板。模板要求页眉和页脚包含某些信息(标题、文档号、日期等)。每个数据也将根据正则表达式进行检查。我知道使用字段、书签等将是优雅的,但我担心我正在处理的文档只是将信息作为文本嵌入在页眉和页脚。

在c#中使用互操作PIA从MS Word页眉和页脚获取所有行

您可以尝试其余的头,以防

foreach (Section section in this.Doc.Sections)
    foreach (HeaderFooter header in section.Headers)
        if (header.Range.Text.Contains("1")) Debugger.Break();

我找到了答案。就像大多数事情一样,它隐藏在人们的眼皮底下。我在控制台使用console . writeline()进行调试,斜杠r占了我的便宜。

private string GetUsableTextFromRange(Word.HeaderFooter headerFooter)
{
    Word.Range range = headerFooter.Range;
    string textWithSlashRs = range.Text;
    string usableText = textWithSlashRs.Replace("'r", Environment.NewLine);
    return usableText;
}

最后我一直都有数据…