【发布时间】:2020-04-28 13:12:53
【问题描述】:
我正在从 html 生成 Word 文档。基本上,我用 html 构建一个文件并将其保存为.doc。然后我在 Word 中打开它并应用模板。到目前为止一切顺利。
我想在构建文档时通过 HTML 自动生成自定义目录。我需要插入一个域代码来做到这一点,就像我通过 HML 添加页码一样。例如:
<span style="mso-field-code: PAGE " class="page-field"></span>
如果我将我的 html 文档保存为 docx 并应用模板,我可以按照通常在 Word 中创建 TOC 的方式制作基于样式的 TOC。我自定义了 TOC,因此标题样式是顶层,然后是 H1、H2 和 H3。如果我随后切换 TOC 上的域代码,则域代码如下所示:
{ TOC \t "Heading 1,2,Heading 2,3,Heading 3,4,Title,1" }
现在,我可以像这样添加 HTML 来插入目录:
<div style="mso-field-code: TOC " class="toc-field">TOC goes HERE</div>
当我这样做时,如果我右键单击文本“TOC 转到此处”,我会选择“更新字段”,如果这样做,则会使用默认的 H1、H2、H3 标记生成 TOC。
但是,我无法解决的是如何包含
\t "Heading 1,2,Heading 2,3,Heading 3,4,Title,1"
部分所以我的自定义样式序列被应用。我尝试了各种组合,似乎在 TOC 之后添加 anything 会导致 Word 不 生成域代码。
有人有什么建议吗?
更新: 基于下面@slightlysnarky 的基本帮助,我想我会在这里总结一下结果,因为我需要的信息在多年前被删除的Microsoft chm file 中。如果您阅读该帮助手册中的以下摘录并将其与下面的解决方案进行比较,您将了解这一切是如何工作的。
Word 通过具有 mso-field-code 样式的 Span 元素标记和存储简单字段的信息。 mso-field-code 值表示字段代码的字符串值。如果只需要代码的字符串值进行计算,则在另存为 HTML 时,原始字段代码中的格式可能会丢失。
对于更复杂的字段,例如具有格式化文本或长值的字段,Word 有一种不同的方式将字段信息存储到 HTML。 Word 标记这些字段,因此数据不会显示在浏览器中。 Word 使用带有
mso-element: field-begin、mso-element: field-separator和mso-element: field-end属性的 Span 元素来包含字段代码的三个相应部分:字段开始、字段代码和字段结果之间的分隔符以及字段结束。只要有可能,Word 就会以使用最少文件空间的方法将该字段保存为 HTML。
因此,基本上,在您希望 TOC 出现的位置添加如下所示的标签。
:-)
【问题讨论】:
-
那么为什么不在 Word 中打开文档后简单地添加一个 TOC 字段呢?您可以在那时指定参考样式。以 HTML 格式保存这样的文档也应该为您提供正确的 HTML 代码,以便将来生成具有所需 HTML 代码的文档。
-
谢谢。是的,当然用户可以手动添加自己的 TOC。大多数人不知道如何生成首先选择标题标签的自定义版本,等等。所以我试图通过字段代码为这些人自动化。而且,是的,我认为我可以通过另存为 HTML 来获得字段代码的正确 HTML 格式,但可惜的是,我得到的只是实际的 TOC 内容。我无法得到消息给我 HTML 中的 TOC 域代码。塔。
-
您在另存为 HTML 时使用了哪些设置。 Word 可以保存为“往返”HTML,这比“标准”HTML 更冗长……除此之外:是否有某些原因无法将宏代码添加到模板中以实现 html 文件格式不具备的功能不支持?
-
@CindyMeister:用例是一个充满 HTML 格式文档片段的数据库。用户可以选择将导出为 HTML 格式的一个或多个“Word”文档的片段。片段标题获得 MsoTitle 样式,我们希望它们在 HTML Word 被打开并保存为 DOCX 时成为 TOC 中的第一级。是否可以通过 HTML 添加宏代码?而且,我会检查 Word HTML 保存选项——我没有意识到有任何选项。谢谢。
-
实现您在上一条评论中描述的最简单方法是将顶级格式设置为“标题 1” - 这是自动的。如果您的要求是(故意未记录的)HTML 文件格式转换不支持的,我建议查看 Word Open XML - 对开发人员来说更复杂(可能)但更通用 - 并记录。
标签: html ms-word tableofcontents fieldcodes