1

我正在尝试根据现有段落p创建一个 docx 文件。我不想克隆段落(最终我想在写入newGraph之前修改文本)

Dim newGraph As New Paragraph
For Each r As Run In p
    newGraph.Append(r)
Next

运行上面的代码会产生以下错误:

无法插入 OpenXmlElement“newChild”,因为它是树的一部分。

从现有段落创建新段落的正确方法是什么(假设我想一路修改文本)。

4

1 回答 1

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)。

希望这可以帮助。

于 2013-06-07T18:20:34.047 回答