DOCX w:t(文本)元素跨越多个w:r(运行)元素?

DOCX w:t (text) elements crossing multiple w:r (run) elements?

我们编写了一个软件,可以从 Word 文档的内部 XML 文件中处理 XML,并用替换值替换某些代码。有时我们会发现这样的代码在多个 运行 之间被分解。这是我们有时会遇到的事情的一个例子:

<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t xml:space="preserve">After all, if you trust [CAN:Forename.ATTORNEY#01] enough to give</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:color w:val="000000"/>
  </w:rPr>
  <w:t>[CAN:ObjPronoun.ATTORNEY#01</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t xml:space="preserve">] power of attorney, you should trust </w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:color w:val="000000"/>
  </w:rPr>
  <w:t>[CAN:ObjPronoun.ATTORNEY#01</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t>] enough to make the right decisions at the time.</w:t>
</w:r>

该段落开头很好,完整代码 [CAN:Forename.ATTORNEY#01] 很好地嵌入到单个 w:t 节点中,这很完美,但在其下方,有一个 w:t 节点包含代码的开始,[CAN:ObjPronoun.ATTORNEY#01 但随后 w:t 标记结束,结束 ] 在下一个 运行.

用户体验 段落的开头呈现得很好,因为 [CAN:Forename.ATTORNEY#01] 呈现为某个人的名字。但是用户在他们的 Word 文档中看到 [CAN:ObjPronoun.ATTORNEY#01],并且 他们 看起来非常好,所以他们希望它也被呈现为一些文本,我们看不到代码,因为它被拆分成多个 运行,因此呈现的文档仍然包含代码,而不是它的替换值。

现在回答我的问题....

有人能解释为什么会这样吗? 如果用户只是简单地输入代码就没问题,但如果他们返回并 fiddle 与这段落。有什么我们可以按照 "don't do this" 或 "don't do that" 或 "make sure you do such-and-such" 的方式告诉用户的吗?或者 Word 中是否有选项可以防止这种情况发生?

是否有用户可以专门通过 MS Word 前端 采取的更正此类段落的操作?目前我们正在指示他们突出显示整个段落,剪切它,将其粘贴到记事本中(它会丢失用户修改历史留下的所有奇怪的碎屑),再次从记事本中复制它并将其粘贴回 Word。是的。这样可行。但这有点...... 不令人满意,至少可以说。所以如果有一个原生的Word方法来实现同样的事情,那就更优雅了....

这里的问题既不是用户在 Word 中的行为,也不是跨 w:r 元素的文本表示。问题在于软件天真地假设要替换的文本必须存在于单个 w:r 元素中。这只是一个错误的假设。

您的选择包括

  1. 修复替换程序对跨运行分区不敏感。
  2. 标准化 OOXML 以满足脆弱性替换程序的需要。
  3. 使用另一种 OOXML 构造(例如内容控件)而不是文本作为占位符。

与此同时,回到牧场,我实际上找到了一个非常简单的问题解决方案。

用户可以识别出不正常的段落,因为在处理后,它仍然包含代码,而不是它们的替换值。

要修复段落,他们需要做的就是使用格式刷。选择他们喜欢的格式,将其应用于整个违规段落和 Bob 的叔叔,问题已解决。