我正在尝试根据现有段落 p 创建docx文件。我不是要克隆段落(最终我想在写入 newGraph 之前修改文本)
Dim newGraph As New Paragraph
For Each r As Run In p
newGraph.Append(r)
Next
运行上面的代码会产生以下错误:
无法插入OpenXmlElement“newChild”,因为它是树的一部分。
从现有段落创建新段落的正确方法是什么(假设我想沿途修改文本)。
答案 0 :(得分:1)
如错误所示, OpenXmlElement
的实例无法添加到多个父级。
你可以:
克隆每个Run
,修改它们,然后将它们添加到新的paragraph
。
Dim newGraph As New Paragraph
For Each r As Run In p
Dim newRun = r.Clone()
''make some changes here
newGraph.Append(newRun)
Next
或克隆整个paragraph
然后循环到每个Run
,如果你想修改它们......
Dim newGraph As Paragraph = Ctype(p.Clone, Paragraph)
For Each r As Run In newGraph.Descendants(Of Run)()
''make some changes here
Next
最佳方法取决于您想要做什么(克隆所有属性与否)。
来自MSDN的评论:
克隆OpenXmlNode会复制所有属性及其值, 包括由XML处理器生成的代表默认值的那些 属性。此方法以递归方式克隆节点和子树 在它下面。克隆等同于调用CloneNode(true)。
希望这有帮助。