Ordine di intestazione / FooterParts nel documento OpenXML
-
02-10-2019 - |
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.
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.