Domanda

Ho bisogno di recuperare le parti di intestazione / piè di pagina da un documento OpenXML nell'ordine in cui appaiono nel documento.

Il seguente: -

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

-appears per scorrere l'HeaderParts in nessun ordine particolare.

Qualcuno può spiegare come ordinare queste correttamente? Sia utilizzando OrderBy, o accedendo al HeaderParts diversamente?

Modifica: Esempi

Ad esempio: -

In un documento di esempio ho diverse interruzioni di sezione. Ogni sezione ha una diversa intestazione / piè di pagina: -

  • Sezione 1 => Sezione 1 Piè di pagina
  • Sezione 2 => Sezione 2 piè di pagina
  • Sezione 3 => Sezione 3 piè di pagina
  • Sezione 4 => Sezione 4 piè di pagina

Non ci sono "diversi prima pagina" o "diversi / pari Dispari" intestazioni o piè di pagina del documento.

Quando tento di iterare questi piè utilizzando document.MainDocumentPart.FooterParts, essi non appaiono nell'ordine 1, 2, 3, 4. non sono stato in grado di determinare la logica dietro l'ordine che questi piè appaiono nella sequenza. Ho il sospetto che non sono ordinate.

Ho bisogno di loro in ordine.

È stato utile?

Soluzione

in realtà non vogliono ottenere le parti di intestazione / piè di pagina prima, si desidera ottenere al loro interno di document.xml nell'ordine cui appaiono - e allora accedere al loro parti. Per questo, avrete bisogno di qualcosa di simile LINQ per interrogare il documento principale. Dopo di che, si può ottenere il loro ID di relazione e da lì confezione uso per ottenere la parte reale. Ma per cominciare, è necessario arrivare al XElement, in questo modo:

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

Ci scusiamo per l'VB.NET - non so C #. Ma il concetto è lo stesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top