2

我正在从 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 来插入 TOC:

<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 之后添加任何内容都会导致 Word生成域代码。

有没有人有什么建议?


更新: 基于下面@slightlysnarky 的基本帮助,我想我会在这里总结一下结果,因为我需要的信息在一个多年前被删除的Microsoft chm 文件中。如果您阅读该帮助手册中的以下摘录并将其与下面的解决方案进行比较,您将了解这一切是如何工作的。

Word 通过具有 mso-field-code 样式的 Span 元素标记和存储简单字段的信息。mso-field-code 值表示字段代码的字符串值。如果仅需要代码的字符串值进行计算,则在另存为 HTML 时,原始字段代码中的格式可能会丢失。

对于更复杂的字段,例如具有格式化文本或长值的字段,Word 有一种不同的方式将字段信息存储到 HTML。Word 标记这些字段,因此数据不会显示在浏览器中。Word 使用带有 、 和 属性的 Span 元素mso-element: field-beginmso-element: field-separator包含mso-element: field-end字段代码的三个相应部分:字段开始、字段代码和字段结果之间的分隔符以及字段结束。只要有可能,Word 就会以使用最少文件空间的方法将字段保存为 HTML。

因此,基本上,在您希望 TOC 出现的位置将如下所示的标签添加到您的 HTML 中。

:-)

4

1 回答 1

2

Word 可以识别 HTML 中的“复杂字段格式”,这与它在 Office Open XML 格式中的做法相同。所以你可以使用

<span style='mso-element:field-begin'></span>TOC \t "Heading 1,2,Heading 2,3,Heading 3,4,Title,1" 
<span style='mso-element:field-separator'></span>This text will show but the user will need to update the field 
<span style='mso-element:field-end'></span>

该结构在名为“Microsoft Office HTML 和 XML 参考”的 Microsoft 文档中进行了概述。它是一个解压为 .chm 帮助文件的 Windows .exe。你可以在 这里得到

信息。关于编码字段的内容位于Microsoft Office 2000 HTML 和 XML 入门-> Microsoft Word ->字段中

可能会有更高版本,但这是我能找到的唯一版本。

于 2020-05-22T09:02:52.543 回答