如何在 .NET 中使用 Word 索引和表格

如何在 .NET 中使用 Word 索引和表格

如何在 .NET 中使用 Word 索引和表格

本指南展示了如何使用 Aspose.Words FOSS for .NET 插入并构建 Word 文档用于汇总自身内容的基于字段的引用结构——目录、字母索引和权威表——。每个结构都由文档其他位置的标记字段编译而成:FieldToc 编译基于标题且标记为 FieldTC 的条目,FieldIndex 编译 FieldXE 标记,FieldToa 编译 FieldTA 引用。该系列的每个字段类都派生自 Aspose.Words.Fields 命名空间中的基础 Field 类型。


分步指南

步骤 1:插入目录

在目录应出现的位置调用 DocumentBuilder.InsertTableOfContents(switches),并传入 Word 样式的字段开关字符串——例如 "\o \"1-3\" \h \z \u"——以控制包含哪些标题级别以及结果的格式,这与 Word 通过 UI 插入目录时使用的开关相同。这会插入一个 FieldToc,它还直接将相同的结构以属性形式公开:用于包含的大纲级别的 HeadingLevelRange/EntryLevelRange,InsertHyperlinks,PreserveTabs/PreserveLineBreaks,以及 BookmarkName。如果需要插入图表目录而不是目录,请在同一 FieldToc 上设置 TableOfFiguresLabel 或 CaptionlessTableOfFiguresLabel。


步骤 2:标记自定义目录条目

并非目录中的每个条目都来自标题样式。 在特定位置插入一个 FieldTC,将其标记为与段落样式无关的目录条目:FieldTC.Text 为条目文本,EntryLevel 为它应出现的纲要层级,OmitPageNumber 则抑制该条目的页码。当文档需要多个目录——例如主目录和单独的图表目录——时,将 FieldTC.TypeIdentifier 设置为匹配应收集它的 FieldToc 的 EntryIdentifier。


步骤 3:根据标记的条目构建索引

使用 FieldXE 标记索引中应包含的每个位置,将 Text 设置为条目文本;EntryType 使用冒号分隔的语法将条目分组为子层级,PageRangeBookmarkName 标记一个书签,其范围在索引中成为页码范围而非单页码。FieldIndex 将文档中所有 FieldXE 标记汇编成字母顺序的结果——将 Heading 设置为插入字母标题分隔符(A、B、C…),将 LetterRange 设置为限制索引仅包含字母表的某部分,将 RunSubentriesOnSameLine 设置为控制子条目布局。PageNumberSeparator、PageRangeSeparator、SequenceSeparator 和 CrossReferenceSeparator 控制条目与页码引用之间的标点。Word 内置的索引可视样式可通过 FieldIndexFormat 枚举获得(Template、Classic、Fancy、Modern、Bulleted、Formal、Simple)。


步骤 4:根据引用构建权威表

使用 FieldTA 标记文本中的每个引用:LongCitation 和 ShortCitation 保存引用文本,EntryCategory 将其归入如“案例”或“法规”等标题下,IsBold/IsItalic 控制其格式。FieldToa 将这些引用汇编成表格——EntryCategory 选择要汇编的类别,UseHeading 控制是否显示类别标题,UsePassim 对多次引用的来源应用“passim”约定,PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting 控制布局。


步骤 5:文档更改后刷新字段

目录、索引或权威表在周围内容更改时不会自动更新。对特定字段调用 Update()——例如 FieldToc.Update()——以重新计算其结果,若仅需刷新页码部分则调用 FieldToc.UpdatePageNumbers()。若要一次性刷新文档中的所有字段,而不是逐个刷新,可调用 Document.UpdateFields()。请记住,这些字段的结果中的页码在本版中会评估为占位符值,因为页面布局和分页不包含在内。


步骤 6:包含来自其他文档的条目

插入一个 FieldRD,使目录、索引或权威表在编译时能够从另一个文件中提取条目。FieldRD.FileName 指定被引用的文档名称,IsPathRelative 控制该路径是否相对于当前文档解析。每增加一个文档,添加一个 FieldRD,并在随后更新编译字段,以便合并结果包含所引用的内容。


常见问题及解决方案

目录未包含预期的标题。 目录的开关字符串(或 HeadingLevelRange) 排除这些大纲级别。调整传递给 InsertTableOfContents,或设置 FieldToc.HeadingLevelRange 直接。

索引条目未出现在预期位置。 相应的 FieldXE 标记缺失,或其 EntryType 子级语法与预期不匹配 FieldIndex 期望。 FieldXE 标记存在且它们的 EntryType 值的格式保持一致。

编辑内容后,字段结果看起来已过时。 编辑后字段未更新。Call Update() 针对特定字段,或 Document.UpdateFields() 一次性刷新所有字段。

在编译时,另一文档中的条目不会被包含。 否 FieldRD 引用该文档存在,或者 IsPathRelative 与路径应解析的方式不匹配。添加一个 FieldRD 使用正确的 FileName and IsPathRelative 设置。


常见问题解答

如何以编程方式插入目录?

在目录应出现的位置,调用 DocumentBuilder.InsertTableOfContents(switches) 并使用 Word 风格的开关字符串,例如 "\o \"1-3\" \h \z \u"。

如何将文本标记为索引条目?

在该位置插入一个 FieldXE 字段,并将其 Text 属性设为条目文本;FieldIndex 会将文档中所有 FieldXE 标记汇编成索引结果。

FieldTC 与基于标题的目录条目有什么区别?

Word 默认的目录行为是从使用标题样式的段落收集条目。FieldTC 将任意位置标记为目录条目,独立于段落样式,FieldToc 可以通过匹配 EntryIdentifier/TypeIdentifier 值来包含它。

文档更改后,如何刷新目录或索引?

对特定字段调用 Update()(或对 FieldToc 调用 UpdatePageNumbers() 仅刷新页码),或使用 Document.UpdateFields() 刷新文档中的所有字段。

是否可以在多个文档之间编译目录或索引?

是——插入一个 FieldRD,通过 FileName 指向每个额外的文档。编译字段(FieldToc、FieldIndex或FieldToa)在更新后会包含来自被引用文档的条目。


另请参阅

 中文