OpenXML文档中的页眉/页脚部件顺序

时间:2010-07-06 11:20:41

标签: c# ms-word openxml-sdk openxml

我需要按照它们在文档中出现的顺序从OpenXML文档中检索页眉/页脚部分。

以下内容: -

foreach (HeaderPart header in document.MainDocumentPart.HeaderParts)
{
  ...
}

- 似乎没有按特定顺序迭代HeaderParts

任何人都可以解释如何正确订购这些吗?通过使用OrderBy,还是以不同方式访问HeaderParts

编辑:示例

例如: -

在示例文档中,我有几个分节符。每个部分都有不同的页眉/页脚: -

  • 第1节=>第1节页脚
  • 第2节=>第2节页脚
  • 第3节=>第3节页脚
  • 第4节=>第4节页脚

文档中没有“不同的第一页”或“不同的奇数/偶数”页眉或页脚。

当我尝试使用document.MainDocumentPart.FooterParts迭代这些页脚时,它们不会出现在1,2,3,4的顺序中。我无法确定这些页脚出现的顺序背后的逻辑序列。我怀疑他们没有订购。

我需要它们。

1 个答案:

答案 0 :(得分:1)

您实际上并不想首先获取页眉/页脚部分,您希望按照它们出现的顺序将它们放在document.xml中 - 然后访问它们的部分。为此,您需要Linq之类的东西来查询主文档。之后,您可以获取他们的关系ID,并从那里使用包装来获得实际部分。但首先,你需要得到xelement,就像这样:

Imports System.Linq
Imports <xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">

Module Module1
    Sub Main()
        Dim doc As String = "C:\headers.docx"
        Dim wordDoc = WordprocessingDocument.Open(doc, False)
        Using wordDoc
            Dim mainPart = wordDoc.MainDocumentPart
            Dim docStream As System.IO.StreamReader = New IO.StreamReader(mainPart.GetStream)
            Dim xDoc As XElement = XElement.Load(docStream)
            Dim sectionHeaders = From e In xDoc...<w:sectPr> Select e.<w:headerReference>
        End Using
    End Sub

End Module

对不起VB.NET - 我不知道C#。但这个概念是一样的。

相关问题