C# 使用OpenXml SDK 2.0克隆Word中的段落属性

C# 使用OpenXml SDK 2.0克隆Word中的段落属性,c#,ms-word,openxml,openxml-sdk,C#,Ms Word,Openxml,Openxml Sdk,我正在通过OpenXMLSDK2.0以编程方式在Word文档中生成新段落。 A有第一个带有属性的段落,我想将其附加到所有新生成的段落中 像这样的事情: var _texts = new List<string>() { "Text 1", "Text 2", "Text 1", "Text 4"}; var sdtBlock = wordDoc.MainDocumentPart.RootElement.Descendants<Paragraph>().First(); f

我正在通过OpenXMLSDK2.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);
}
var\u Text=new List(){“Text 1”、“Text 2”、“Text 1”、“Text 4”};
var sdtBlock=wordDoc.MainDocumentPart.RootElement.subjections().First();
foreach(文本中的字符串)
{
第p段=新的第()段;
p、 追加(sdtBlock.ParagraphProperties);
p、 追加(新运行(新文本(_t)));
sdtBlock.InsertAfterSelf(p);
}
执行此代码会引发异常:“无法插入OpenXmlElement“newChild”,因为它是树的一部分。”
有什么想法吗?

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

p.Append(sdtBlock.ParagraphProperties.CloneNode(true));
否则,您将得到您描述的异常(因为您将在同一文档中的两个不同位置添加原始节点,这是不允许的,并且不是您想要做的)