MS-Word 将文本分成字符运行
MS-Word breaking text into character runs
我有一个任务需要在我的 .docx
文件中放置占位符并自动用我拥有的信息替换它们。我尝试将 ${VARNAME} 作为占位符语法,但在该 docx 文件的 document.xml 中,我看到 $、{、VARIABLE 和 } 分为 4 个不同的字符运行。 WORD是根据什么选择这个的。有没有办法避免这种情况?
为了替换占位符和操作 docx 文件,我使用的是 docx4j。我正在通过 XPATH 提取 w:t
节点。最近我尝试将占位符语法仅作为 $VARNAME 并且没有被分解。我可以将其视为占位符的万无一失的命名约定吗?如果不能,你能建议我如何解决这种情况。在 docx 中引入自定义标签会有帮助吗?任何建议表示赞赏。
您可以永远假设 Word 不会拆分字符 运行。没有保证的方法。您要么需要改变提取信息的方法,而不是依赖于单个 <w:t>
标记中的所有内容,要么您需要使用不同类型的 "target"。
Word 不支持 "custom tags",所以这不是一个选项。
更可靠的是使用ContentControl(标准标签)。那个 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:alias
或 w:tag
(您的选择)。它们分别对应于 Word UI 和对象模型中的 Title 和 Tag 属性。这些绝不会被分解。
从那里,您将获得 <w:sdtContent>
元素的 <w:t>
后代。
如果您愿意,可以将内容控件映射到存储在文档中的自定义 XML 部分中的节点。 (与文本中的自定义标签不同,Word 确实 支持在文档的 Zip 包中添加 xml 文件。)在这种情况下,您的代码可以解决自定义 XML 文件,而不是 document.xml 以便 read/write 内容。更改将反映在链接到节点的内容控件中。
我有一个任务需要在我的 .docx
文件中放置占位符并自动用我拥有的信息替换它们。我尝试将 ${VARNAME} 作为占位符语法,但在该 docx 文件的 document.xml 中,我看到 $、{、VARIABLE 和 } 分为 4 个不同的字符运行。 WORD是根据什么选择这个的。有没有办法避免这种情况?
为了替换占位符和操作 docx 文件,我使用的是 docx4j。我正在通过 XPATH 提取 w:t
节点。最近我尝试将占位符语法仅作为 $VARNAME 并且没有被分解。我可以将其视为占位符的万无一失的命名约定吗?如果不能,你能建议我如何解决这种情况。在 docx 中引入自定义标签会有帮助吗?任何建议表示赞赏。
您可以永远假设 Word 不会拆分字符 运行。没有保证的方法。您要么需要改变提取信息的方法,而不是依赖于单个 <w:t>
标记中的所有内容,要么您需要使用不同类型的 "target"。
Word 不支持 "custom tags",所以这不是一个选项。
更可靠的是使用ContentControl(标准标签)。那个 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:alias
或 w:tag
(您的选择)。它们分别对应于 Word UI 和对象模型中的 Title 和 Tag 属性。这些绝不会被分解。
从那里,您将获得 <w:sdtContent>
元素的 <w:t>
后代。
如果您愿意,可以将内容控件映射到存储在文档中的自定义 XML 部分中的节点。 (与文本中的自定义标签不同,Word 确实 支持在文档的 Zip 包中添加 xml 文件。)在这种情况下,您的代码可以解决自定义 XML 文件,而不是 document.xml 以便 read/write 内容。更改将反映在链接到节点的内容控件中。