【问题标题】:MS-Word breaking text into character runsMS-Word 将文本分解为字符运行
【发布时间】:2016-03-01 06:29:05
【问题描述】:

我有一项任务需要在我的.docx 文件中放置占位符,并自动将它们替换为我拥有的信息。我尝试将 ${VARNAME} 作为占位符语法,但在该 docx 文件的 document.xml 中,我看到 $、{、VARIABLE 和 } 分为 4 个不同的字符运行。 WORD选择这个的依据是什么。有没有办法避免这种情况发生?

为了替换占位符和操作 docx 文件,我使用的是 docx4j。我正在通过 XPATH 提取 w:t 节点。最近我尝试将占位符语法仅用作 $VARNAME 并且没有分解。我可以认为它是占位符的万无一失的命名约定吗?如果不能,你能建议我如何解决这种情况。在 docx 中引入自定义标签会有帮助吗?任何建议表示赞赏。

【问题讨论】:

标签: algorithm xpath ms-word automation docx4j


【解决方案1】:

您可以永远假设 Word 不会中断字符运行。没有保证的方法。您要么需要更改提取信息的方法,不要依赖单个 <w:t> 标记中的所有内容,要么需要使用不同类型的“目标”。

Word 不支持“自定义标签”,所以这不是一个选项。

更可靠的是使用ContentControl(std标签)。 Word Open XML 看起来像这样:

<w:sdt>
  <w:sdtPr>
    <w:alias w:val="test"/><w:tag w:val="test"/><w:id w:val="803656476"/>
    <w:placeholder>
      <w:docPart w:val="B4C191A9BCFE488E807F3919BC721619"/>
    </w:placeholder>
    <w:text/>
  </w:sdtPr>
  <w:sdtContent>
    <w:p>
      <w:r>
        <w:t>Content to be changed by code.</w:t>
      </w:r>
    </w:p>
  </w:sdtContent>
</w:sdt>

VARNAME 可以是 w:aliasw:tag(您的选择)。这些分别对应于 Word UI 和对象模型中的 Title 和 Tag 属性。这些是不可能被打破的。

从那里,您将获得&lt;w:sdtContent&gt; 元素的&lt;w:t&gt; 后代。

如果您愿意,可以将内容控件映射到存储在文档中的自定义 XML 部件中的节点。 (与文本中的自定义标记不同,Word 是否 支持在文档的 Zip 包中添加 xml 文件。)在这种情况下,您的代码可以处理自定义 XML 文件,而不是文件中的 document.xml为了读/写内容。更改将反映在链接到节点的内容控件中。

【讨论】:

  • 嘿,你能告诉更多如何将节点链接到内容控制。你的答案是 docx4j 吗?一个链接或步行槽会很有帮助!
猜你喜欢
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多