我正在尝试根据现有段落p创建一个 docx 文件。我不想克隆段落(最终我想在写入newGraph之前修改文本)
Dim newGraph As New Paragraph
For Each r As Run In p
newGraph.Append(r)
Next
运行上面的代码会产生以下错误:
无法插入 OpenXmlElement“newChild”,因为它是树的一部分。
从现有段落创建新段落的正确方法是什么(假设我想一路修改文本)。
我正在尝试根据现有段落p创建一个 docx 文件。我不想克隆段落(最终我想在写入newGraph之前修改文本)
Dim newGraph As New Paragraph
For Each r As Run In p
newGraph.Append(r)
Next
运行上面的代码会产生以下错误:
无法插入 OpenXmlElement“newChild”,因为它是树的一部分。
从现有段落创建新段落的正确方法是什么(假设我想一路修改文本)。
如错误所示,不能将实例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)。
希望这可以帮助。