3

我正在通过 Open XML SDK 2.0 在 Word 文档中以编程方式生成新段落。A 有具有属性的第一段,我想将其附加到所有新生成的段落中。

像这样的东西:

var _texts = new List<string>() { "Text 1", "Text 2", "Text 1", "Text 4"};
var sdtBlock = wordDoc.MainDocumentPart.RootElement.Descendants<Paragraph>().First();
foreach (string _t in _texts)
{
    Paragraph p = new Paragraph();
    p.Append(sdtBlock.ParagraphProperties);
    p.Append(new Run(new Text(_t)));
    sdtBlock.InsertAfterSelf<Paragraph>(p);
}

执行此代码会引发异常:“无法插入 OpenXmlElement “newChild”,因为它是树的一部分。” 有任何想法吗?

4

1 回答 1

8

您需要使用该CloneNode()方法复制ParagraphProperties要添加到新段落中的实例,例如

p.Append(sdtBlock.ParagraphProperties.CloneNode(true));

否则,您将得到您描述的异常(因为您将在同一个文档的两个不同位置添加原始节点,这是不允许的 - 而不是您打算做的)。

于 2012-12-07T08:43:59.393 回答