Orden de Cabecera / FooterParts en el documento OpenXML
-
02-10-2019 - |
Pregunta
necesito para recuperar partes de encabezado / pie de página de un documento OpenXML en el orden en que aparecen en el documento.
La siguiente: -
foreach (HeaderPart header in document.MainDocumentPart.HeaderParts)
{
...
}
-appears para iterar a través de la HeaderParts
en ningún orden en particular.
Puede alguien explicar cómo ordenar estos correctamente? Ya sea mediante el uso de OrdenarPor, o accediendo al HeaderParts
diferente?
Editar: Ejemplos
Por ejemplo: -
En un documento de ejemplo que tiene varios saltos de sección. Cada sección tiene una cabecera diferente / pie de página: -
- Sección 1 => Sección 1 de pie de página
- Sección 2 => Sección 2 de pie de página
- Sección 3 => Sección 3 de pie de página
- Sección 4 => Sección 4 de pie de página
No hay "una primera página diferente" o "diferentes" Impar Par / encabezados o pies en el documento.
Cuando intento para iterar sobre estos pies de página utilizando document.MainDocumentPart.FooterParts
, que no aparecen en el orden 1, 2, 3, 4. No he podido determinar la lógica detrás de la orden que estos pies de página aparecen en la secuencia. Sospecho que no están ordenados.
Los necesito en orden.
Solución
No realmente quiere conseguir las piezas de encabezado / pie de página en primer lugar, usted quiere conseguirlos dentro de document.xml en el orden que aparecen - y luego acceder a sus partes. Para ello, necesitará algo así como LINQ para consultar el documento principal. Después de eso, usted puede conseguir sus identificadores de relación y de ahí el uso de envases para obtener la parte real. Pero para empezar, tendrá que llegar a la XElement, así:
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
Lo siento por el VB.NET - No sé C #. Pero el concepto es el mismo.