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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top