2

ドキュメントに表示される順序で、OpenXML ドキュメントからヘッダー/フッター パーツを取得する必要があります。

以下:-

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

HeaderParts-特定の順序で繰り返されないように見えます。

これらを正しく注文する方法を誰か説明できますか? OrderBy を使用するか、HeaderParts別の方法でアクセスしますか?

編集:例

例えば:-

サンプル ドキュメントでは、いくつかのセクション区切りがあります。各セクションには異なるヘッダー/フッターがあります:-

  • セクション 1 => セクション 1 フッター
  • セクション 2 => セクション 2 フッター
  • セクション 3 => セクション 3 フッター
  • セクション 4 => セクション 4 フッター

ドキュメントには、「異なる最初のページ」または「異なる奇数/偶数」ヘッダーまたはフッターはありません。

を使用してこれらのフッターを反復しようとすると、1、2、3、4document.MainDocumentPart.FooterPartsの順序で表示されません。これらのフッターがシーケンスに表示される順序の背後にあるロジックを特定できませんでした。注文されていないのではないかと思います。

順番にそれらが必要です。

4

1 に答える 1

1

実際にはヘッダー/フッター部分を最初に取得するのではなく、それらが表示される順序で 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

VB.NET で申し訳ありません。C# はわかりません。しかし、コンセプトは同じです。

于 2010-07-06T14:56:23.587 に答える