我正在通过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“,因为它是树的一部分。” 有什么想法吗?
答案 0 :(得分:6)
您需要使用CloneNode()
方法制作要添加到新段落中的ParagraphProperties
实例的副本,例如
p.Append(sdtBlock.ParagraphProperties.CloneNode(true));
否则,您将获得您所描述的异常(因为您将在同一文档中的两个不同位置添加原始节点,这是不允许的 - 而不是您打算做的事情。)