2

我需要按照它们在文档中出现的顺序从 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 的顺序出现。我无法确定这些页脚在序列中出现的顺序背后的逻辑。我怀疑他们没有被订购。

我需要他们按顺序。

4

1 回答 1

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#。但概念是一样的。

于 2010-07-06T14:56:23.587 回答