2016-11-25 29 views
0

部分的にマージしようとする文書が2つあります。OpenXML - 文書をマージするときに箇条書きの点が番号付きリストに変換される

私はRTFコンテンツコントロールの内部にあるとのAppendChildとcloneNodeを(真)(深いクローニング)を使用して、ドキュメントB内の別のsdtContentへのコンテンツコントロールのsdtContentのすべての子要素をコピー文書Aからいくつかの部品を取る:

foreach (var srcChildElement in sourceDocumentSdtContentBlockNode.ChildElements) 
{ 
    targetSdtContentBlock.AppendChild(srcChildElement.CloneNode(true); 
} 

ソースドキュメントAのコンテンツ(リストアイテム)が箇条書きでフォーマットされている場合、ドキュメントBの結果にはリスト項目の番号が付けられます。

なぜ私はそれをクローンしたときにソースに似ていますか?私はそれを操作しないので、それはちょうどそのスタイルを保つだろうと思った。ドキュメントBでは、書式設定の問題もないようです。箇条書きや番号付きリストを問題なく挿入することができます。

私は2つの完全に新しい単語文書を作成し、同じことが起こったので、それは確かに既存のファイルでは問題ではありません。

更新:私はコピーノードの一部ではない文書(https://msdn.microsoft.com/en-us/library/office/ee922775(v=office.14).aspx)における別の番号の定義があることが判明 。ノードをクローンすると、この情報は別の番号付け定義に含まれていません。ノードを新しい文書にコピーし、番号付けの定義から番号付けスタイルを保持するように指示する方法はありますか?もう1つの選択肢は、複製されたノードにnumPr要素が含まれているかどうかを手動でチェックし、可能であれば定義を抽出する(IDの変更と再割り当てを含む) - 要素をコピーし、 )

アイデア?

答えて

1

私はこれを解決できました。既に述べたように番号付け情報は、別個の部分(または文書のzip内のファイル)に格納されている: https://msdn.microsoft.com/en-us/library/office/ee922775(v=office.14).aspx

(NumberingPartで)からIは、必要に応じて、コピー元の(段落内部numPrがある場合)。検索の対象ファイルには、numPrnumIdがあります。

numエレメントおよび対応するabstractNumエレメントを標的にクローニングした。これを行うには、numIdabstractNumIdnsid(16進数)のようなID(ターゲット内の既存の要素IDを使用して1ずつインクリメント)を置き換えて、競合がないことを確認しました。

少し仕事があったものの、非常に実行可能でした。

+0

ところで:(DocumentBuilderクラスで)ドキュメントをマージするには、OpenXML PowerToolsを使用することを強くお勧めします。 PowerToolsを使用すると、ホイールを再度作成する必要はありません... – Patric

関連する問題