用户指南 > 关于用户指南 > Word 和 Excel 模板 > CB 7.2 - 9.2 中的 Word 模板 > 高级 Word 报告:自定义目录并为 Wiki 元素分配 Word 样式
高级 Word 报告:自定义目录并为 Wiki 元素分配 Word 样式
本主题包括有关自定义目录以及为 Wiki 元素分配 Word 样式的信息。
问题:Word 导出中的目录 
使用默认模板导出到 Word 时,您将看到导出的 Word 文档包含每个已导出工作项的“说明”部分。
导出功能正常工作,但存在一个问题。如果工作项的“说明”包含标题 1/标题 2/等标记,则这些标题将出现在已导出 Word 文档的目录中,以及 Word 文档的“导航”窗格上,如下面的屏幕截图所示。
要从已导出的 Word 文档中移除其他标题项,请按照下一部分中所述的说明进行操作。
解决方案操作方法 
这些来自工作项说明的标题元素将出现在 Word 的目录中,因为 HTML 标题元素由 Word 的标题 1/标题 2/等样式自动映射,并且它们会自动显示在目录中。
修复在附加的自定义模板中实施:下载
解决方案如下:
为“标题 1/标题 2/等”创建新的 Word 样式。这不会出现在目录中。
在 Word 导出期间,捕获生成的 HTML (从 Wiki 标记构建) 中的标题元素。
将 HTML 标记和映射重写为新的 Word 样式,新样式不会显示在目录中。
然后调整 CSS,使标题元素看起来与 Word 中的样式相同。
准备新模板 
首先,创建默认模板的新副本并保存。此处的所有更改都将添加到该副本中。
为标题元素创建不会显示在目录中的新 Word 样式 
打开模板并在模版中定义名为 HiddenHeading1 的新样式。要执行此操作,请遵循此屏幕截图中的步骤:
1. 单击“样式”工具栏中的小图标。将会显示“样式”对话框。
2. 单击“样式”对话框中的“新建”图标,随即打开“创建新样式”对话框
3. 在本示例中,在“创建新样式”对话框中输入新样式名称 HiddenHeading1
4. 然后选择父样式 (所基于的样式),新样式将继承父样式的设置和外观。在本案例中,父样式将是“标题 1”。
5. 接下来自定义新样式的外观。为此,单击下面的“格式”按钮,然后选择“段落”。
6. 随即出现“段落”对话框。因为在 HiddenHeading1 中,我们不希望格式出现在目录中,因此将“大纲级别”特性更改为“正文文本”,这样,样式便不会显示在目录中。
现在,我们已经创建 HiddenHeading1,它是“标题 1”的副本,但是具有此样式的元素不会出现在目录中。对“标题 2”和“标题 3”重复相同的操作,并创建像 HiddenHeading2HiddenHeading3 一样的类似配对。
重写说明的标题 Wiki/HTML 元素 
现在,我们可以使用 HiddenHeading1/HiddenHeading2 等 Word 样式。要使用这些样式,而非标准的“标题 1/等”。Word 导出模板需要重写从工作项说明生成的 HTML,才能使用这些模板。
因此,如果说明包含此 Wiki 文本:
!1 Heading one

content-one
将作为 HTML 片段导出/呈现:
<h1>Heading one</h1>
content-one
要使其使用 HiddenHeading1 Word 样式,必须使用此 Word 兼容标记替换此类 <h1> 标记:
<p class="HiddenHeading1">Heading one</p>
content-one
为此,我们必须添加一些代码,以重写 Word 导出模板中的 HTML 输出。因此,将此脚本用作自定义 Word 导出模板“说明”部分的替换脚本:
## capture the HTML form of the Work item's description to a variable
#set($html = $wikiMarkupProcessor.transformToHtml(${describable.description}, ${describable.descriptionFormat}, false, false, $wikiContext))

<!-- ## Trick: adding an html comment block around this script to avoid any output appearing from here
## parse the HTML output of the item's description using JSOUP
## calls the static method: JSoup.parse(String)
#set($Jsoup = $Class.forName(œ“org.jsoup.Jsoup”))
#set($doc = $Jsoup.parse($html))

##following modifies all h elements adds red font-color
##${doc.select(“h1,h2,h3,h4,h5,h6”).attr(“style”,”mso-outline-level:6;color:red;”)}
## replace H1 with <p class=”HiddenHeading1” so the Word's HiddenHeading1 style will be applied on this,
## therefore won't appear in the Table of contents!
${doc.select(œ“h1”).tagName(“p”).attr(“class”,”HiddenHeading1”)}
${doc.select(“h2”).tagName(“p”).attr(“class”,”HiddenHeading2”)}
${doc.select(“h3”).tagName(“p”).attr(“class”,”HiddenHeading3”)}
-->
## print out the modified HTML
${doc.html()}

这有什么用?脚本内的备注可帮助您了解此信息,但简言之:
调用标准 Wiki -> HTML 转换方法并将其 HTML 输出捕获到变量。
使用 Jsoup java HTML 解析器 库对 HTML 进行解析。此库作为默认库随 Codebeamer 提供,用于清理其他位置的 HTML,但在此处也非常有用。
使用 Jsoup 的选择器语法 查找 H1/H2/H3 html 标记,并使用 Jsoup 的操作方法 将它们替换为适当的 <p> 标记并正确设置 CSS 类。
最后,打印出修改后的 HTML 标记。
添加 CSS 样式,以正确查找并绑定正确的 Word 样式 
现在已将 h1/h2/h3 HTML/Wiki 标题替换为段落,这仍未获得正确的 Word 样式,而且在最终的 Word 文档中也不美观。
要对此进行修正,您需要添加一些 CSS 样式规则。要生成这些缺失的 CSS 样式,请执行以下操作:
转至 Word,在模板中为每个新样式创建一个新段落,因此应该有一个段落使用 HiddenHeading1,另一个段落使用 HiddenHeading2,以此类推。
使用 Word 的“另存为”功能保存模板,并另存为 HTML 格式:
在纯文本编辑器 (记事本) 中打开创建的 style.htm
style.html 中搜索适用于 HiddenHeading1 以及其他所需新样式的 CSS 规则:
找到的自定义样式将包含一个 mso-style-name,该名称可将此 CSS 样式绑定到相应的 Word 样式。它还包含其他外观元素,例如字体大小等。
将所有需要的 CSS 规则复制到您的模板中,并将其添加到 Custom CSS 块中:
现已完成操作。“保存”模板并尝试导出。
最终结果应该为:
事项说明的标题元素不会出现在 Word 的目录中。
但重新映射的标题元素应该与普通“标题 1 等”样式的外观相同。
这对您有帮助吗?