使用索引和表字段
使用索引和表格字段
本指南展示了如何使用 Word 的 “索引和表格” 字段族——这些字段位于目录、索引、图表目录和权威目录背后。这些都是 Field 子类,位于 Aspose.Words.Fields 命名空间中:FieldToc(目录或图表),FieldIndex(索引),FieldXE(索引条目),FieldToa(权威目录),FieldTA(权威目录条目或引用),FieldTC(目录条目),以及 FieldRD(引用的文档,用于在多个文件之间构建组合索引或目录)。
字段基类
该族中的每个字段类都继承自 Field,它公开了 Start、Separator 和 End(将字段绑定在运行流中的 FieldStart、FieldSeparator、FieldEnd 节点),Type(一个 FieldType 值——FieldTOC、FieldIndex、FieldTOA、FieldTOCEntry、FieldIndexEntry、FieldTOAEntry 或 FieldRefDoc,对应此族),Result/DisplayResult(字段当前计算的文本),IsLocked 和 IsDirty,以及方法 GetFieldCode()、Update()、Unlink() 和 Remove()。Update() 重新计算字段的结果;对于目录,这意味着根据文档的标题或 FieldTC 标记重建条目列表。
插入目录
DocumentBuilder.InsertTableOfContents(switches) 在构建器的当前位置插入一个 FieldToc,使用 Word 字段开关字符串(例如 "\o \"1-3\" \h \z \u")来控制包含哪些标题级别以及结果的格式——这与通过 UI 插入目录时 Word 本身写入的开关相同。插入后,FieldToc.UpdatePageNumbers() 重新计算现有条目的页码部分。FieldToc 还直接公开了控制目录结构的属性:HeadingLevelRange 和 EntryLevelRange(包含哪些大纲级别),EntryIdentifier(目录应收集的 TC 字段标识符,用于从不同的 FieldTC 标记构建多个目录),InsertHyperlinks、PreserveTabs/PreserveLineBreaks、EntrySeparator/SequenceSeparator、BookmarkName,以及——对于图表目录而非目录——TableOfFiguresLabel 和 CaptionlessTableOfFiguresLabel。
标记自定义目录条目
并非所有目录条目都来自标题样式。FieldTC 将特定位置标记为独立于段落样式的目录条目:FieldTC.Text 是条目文本,EntryLevel 是它应出现的纲要级别,TypeIdentifier 在构建多个目录时将其链接到一个 FieldToc.EntryIdentifier,而 OmitPageNumber 则抑制该条目的页码。
构建索引
FieldIndex 实现了 INDEX 域,用于将文档的 FieldXE(索引条目)标记汇编成按字母顺序排列的索引。FieldXE.Text 是条目文本,EntryType 使用冒号分隔语法将条目分组为子级,PageRangeBookmarkName 标记一个书签,其范围在索引中显示为页码范围而非单个页码,IsBold/IsItalic 用于格式化生成的页码引用。在 FieldIndex 方面,Heading 插入字母标题分隔符(A、B、C…),LetterRange 将索引限制在字母表的子集,RunSubentriesOnSameLine 控制子条目的布局,PageNumberSeparator/PageRangeSeparator/SequenceSeparator/CrossReferenceSeparator 控制条目与页码引用之间的标点。FieldIndexFormat 单独列举了 Word 内置的索引视觉样式(Template、Classic、Fancy、Modern、Bulleted、Formal、Simple)。
权威目录
FieldToa 和 FieldTA 是对应于 FieldIndex/FieldXE 的权威项:FieldTA 标记文本中的引用(LongCitation 和 ShortCitation 文本,EntryCategory 用于将其归入如 “案例” 或 “法规” 等标题下,以及 IsBold/IsItalic 用于格式化),FieldToa 将这些引用编入表格,其中 EntryCategory 选择要编入的类别,UseHeading 和 UsePassim 控制类别标题以及对多次引用的来源使用的 “passim” 约定,PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting 控制布局。
引用其他文档的内容
FieldRD 实现了 RD 域,用于在编制目录、索引或权威目录时指示其包含来自另一个文件的条目——FieldRD.FileName 是被引用的文档,IsPathRelative 控制该路径是否相对于当前文档解析。
技巧与最佳实践
- 像 Word 那样构建目录切换字符串(
\o "1-3" \h \z \u),而不是单独配置每个FieldToc属性,然后仅调整后续需要更改的特定属性。 - 在内容更改后调用
FieldToc.UpdatePageNumbers()(或Field.Update()),使目录、索引或权威表能够反映当前文档,而不是插入时的过时结果。 - 当文档需要多个目录(例如主目录和单独的图表目录),且它们基于不同的条目集合构建时,请将
FieldTC.TypeIdentifier与FieldToc.EntryIdentifier结合使用。 - 设置
FieldXE.PageRangeBookmarkName(或FieldTA的等效范围标记),而不是在条目文本中手动格式化页码范围,这样在内容移动时索引/目录仍保持一致。 - 请记住,此版本的 INDEX/TOC/TOA 结果中的页码会被评估为占位符值,而非真实页码,因为页面布局和分页不属于本版本。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
| 目录未包含预期的标题 | 目录的切换字符串(或 HeadingLevelRange)排除了这些大纲级别 | 调整传递给 InsertTableOfContents 的开关,或设置 FieldToc.HeadingLevelRange |
| 索引条目未出现在预期位置 | 相应的 FieldXE 标记缺失,或其 EntryType 子级语法与 FieldIndex 的期望不匹配 | 确认 FieldXE 标记存在,并且它们的 EntryType 值格式保持一致 |
| 编辑内容后,字段结果看起来仍然是旧的 | 编辑后字段未更新 | 对字段调用 Update()(或在 Document 上调用 UpdateFields()) |
| 编译时未包含来自其他文档的条目 | 不存在引用该文档的 FieldRD,或者 IsPathRelative 与路径应解析的方式不匹配 | 添加一个具有正确 FileName 和 IsPathRelative 设置的 FieldRD |
FAQ
如何以编程方式插入目录?
在目录应出现的位置,使用 Word 风格的开关字符串(例如 "\o \"1-3\" \h \z \u")调用 DocumentBuilder.InsertTableOfContents(switches)。
如何将文本标记为索引条目?
在该位置插入一个 FieldXE 域(例如通过 DocumentBuilder.InsertField),并将其 Text 属性设置为条目文本;FieldIndex 会将文档中所有 FieldXE 标记汇编成索引结果。
FieldTC 与基于标题的目录条目之间有什么区别?
Word 默认的目录行为会从使用标题样式的段落中收集条目。FieldTC 允许您将任意位置标记为目录条目,且不受段落样式限制,FieldToc 可以通过匹配 EntryIdentifier/TypeIdentifier 值将其包含进来。
文档更改后,如何刷新目录或索引?
对特定域调用 Update()(例如 FieldToc.Update(),或仅针对页码使用 FieldToc.UpdatePageNumbers()),或使用 Document.UpdateFields() 刷新文档中的所有域。
我可以跨多个文档编制目录或索引吗?
是 — 插入一个 FieldRD 字段,通过 FileName 指向每个额外的文档;编译字段(FieldToc、FieldIndex或FieldToa)在更新时会包含来自被引用文档的条目。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
Field | 所有字段类型的基类,包括 Start/Separator/End,Type,Update() |
DocumentBuilder.InsertTableOfContents(switches) | 使用 Word 风格的 TOC 开关插入一个 FieldToc |
FieldToc | 实现 TOC 字段(目录或图表目录) |
FieldTC | 在特定位置标记自定义目录条目 |
FieldIndex | 实现 INDEX 字段,编译 FieldXE 标记 |
FieldXE | 将位置标记为索引条目 |
FieldToa | 实现 table-of-authorities 字段,编译 FieldTA 标记 |
FieldTA | 将引用标记为权威目录 |
FieldRD | 在编制目录、索引或权威目录时引用另一个文档的内容 |
FieldIndexFormat | Word 内置索引视觉样式的枚举 |