3

2つのWord文書(WordprocessingDocument)があり、最初の要素の内容を2番目の要素の本文の内容に置き換えたいと思います。

これは私が今していることです:

var docA = WordprocessingDocument.Open(docAPath, true);
var docB = WordprocessingDocument.Open(docBPath, true);

var containerElement = docA.MainDocumentPart.Document.Body
           .Descendants<SdtBlock>()
           .FirstOrDefault(sdt => sdt.SdtProperties.Descendants<SdtAlias>().Any(alias => alias.Val == containerElementName))
           .SdtContentBlock;

var elementsToCopy = docB.MainDocument.Part.Document.Body.ChildElements.Where(e => e.LocalName != "sectPr"));

containerElement.RemoveAllChildren();
containerElement.Append(elementsToCopy);

基本的に、エイリアスを使用して最初のドキュメントからコンテナ(SdtBlock)を取得し、それを識別します。次に、2番目の要素のすべての子を取得し(コピーしたくないSectionPropertiesを削除します)、それらをに追加しようとします。コンテナ要素。

問題は、この例外が発生することです。

Cannot insert the OpenXmlElement "newChild" because it is part of a tree.

そのコードの最後の行(追加)を呼び出すと。

どうすれば私が望むものを達成できるかについてのアイデアはありますか?

4

2 に答える 2

8

コピーするには要素のクローンを作成する必要がありますcontainerElement.Append(elementsToCopy.CloneNode(true));

于 2012-02-27T16:05:53.307 に答える
3

elementsToCopyは、元のツリーに引き続きアタッチされています。したがって、親を削除するか、コピーする必要があります(元の状態を維持するため)。removeParent()メソッドがあると思います。

于 2010-09-16T14:23:22.913 に答える