代码之家  ›  专栏  ›  技术社区  ›  Iain Galloway

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

  •  2
  • Iain Galloway  · 技术社区  · 14 年前

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

    下列内容:

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

    -似乎在重复 HeaderParts 没有特别的顺序。

    有人能解释一下如何正确订购这些吗?通过使用orderby或访问 头饰 不同的?

    编辑:实例

    例如:

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

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

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

    当我尝试使用 document.MainDocumentPart.FooterParts ,它们不按顺序1、2、3、4显示。我无法确定这些页脚在序列中出现的顺序背后的逻辑。我怀疑他们没有被命令。

    我需要它们。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Todd Main    14 年前

    实际上,您不希望首先获取页眉/页脚部分,而是希望按照它们出现的顺序将它们放入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
    

    抱歉,我不知道C。但概念是一样的。