使用样式
使用样式
本指南展示了如何在使用段落、字符、表格和列表样式 Aspose.Words FOSS 用于 .NET — 查找并应用内置和自定义样式,以及在表格样式上配置按区域的条件格式。
一个 Style 对象表示单个内置或用户定义的样式——Word 在段落或运行被分配该样式时应用的、包含段落、字体和列表格式的具名集合。每个文档通过 Document.Styles 属性公开其样式,该属性返回一个 StyleCollection。表格样式由 TableStyle 表示,它是 Style 的子类,添加了表格特定的格式以及通过 ConditionalStyleCollection 实现的区域条件格式。
样式类型和标识
每个 Style 都有一个类型为 StyleType 的 Type 属性,该属性的取值之一为 Paragraph、Character、Table 或 List——对应 Word 支持的四种样式。内置样式还携带一个与地区无关的 StyleIdentifier 枚举值(例如对应标题、强调和超链接样式的值),以便代码能够在不依赖特定语言显示名称的情况下查找内置样式。样式的可读名称可通过 Style.Name 获取,Style.Aliases 则返回 Word 为同一样式识别的任何别名。Style.BuiltIn 报告该样式是随 Word 本身一起提供的,还是在文档中定义的,Style.IsHeading 报告该样式是否为内置的标题样式之一。
访问和管理样式集合
StyleCollection 是文档中所有 Style 对象(包括内置和自定义)的集合,可通过 Document.Styles 访问。使用 StyleCollection 索引器——styles[name]——可按显示名称检索样式,或使用相同索引器通过其地区无关的 StyleIdentifier 检索内置样式——styles[sti]——这比在不同语言编写的文档中按名称查找更可靠。新样式使用 StyleCollection.Add(type, name) 创建,指定 StyleType 和名称,现有样式可通过 StyleCollection.AddCopy(style) 复制到集合中。StyleCollection.Count 报告文档拥有的样式数量,集合还公开 DefaultFont 和 DefaultParagraphFormat,它们描述在应用任何显式样式之前,新内容继承的全局默认格式。StyleCollection.ClearQuickStyleGallery() 将所有样式从 Word UI 的快速样式库中移除,但不删除这些样式本身。
对段落和运行应用样式
能够携带样式的格式化对象同时公开一个 Style 属性(即 Style 对象本身)和一个 StyleName 属性(一个通过名称解析或创建样式的快捷方式)。ParagraphFormat.Style 和 ParagraphFormat.StyleName 应用段落样式,而 Font.Style 和 Font.StyleName 将字符样式应用于运行的格式。样式自身的 LinkedStyleName、BaseStyleName 和 NextParagraphStyleName 属性描述它与其他样式的关系:BaseStyleName 指定它继承未设置格式的样式,LinkedStyleName 指定配对的段落/字符样式(如 Word 对内置样式 Heading 1 及其关联字符样式的处理),NextParagraphStyleName 指定 Word 为在使用此样式后输入的新段落分配的样式。
表格样式和条件格式化
TableStyle 扩展了 Style,添加了表布局属性,例如 Alignment、CellSpacing、LeftIndent、Shading、VerticalAlignment,以及内边距(LeftPadding、RightPadding、TopPadding、BottomPadding),再加上 RowStripe 和 ColumnStripe,它们控制条纹模式在多少行或列上重复。除了统一的表格格式外,TableStyle.ConditionalStyles 返回一个 ConditionalStyleCollection,其中每个表格区域包含一个 ConditionalStyle——FirstRow、LastRow、FirstColumn、LastColumn、OddRowBanding、EvenRowBanding、OddColumnBanding、EvenColumnBanding,以及四个角落单元格(TopLeftCell、TopRightCell、BottomLeftCell、BottomRightCell)。每个 ConditionalStyle 拥有其自己的 Font、ParagraphFormat、Shading、Borders 和单元格内边距,其 Type 属性报告它代表的 ConditionalStyleType 区域。ConditionalStyle.ClearFormatting() 和 ConditionalStyleCollection.ClearFormatting() 重置单个区域或整个条件区域集合的格式。
样式元数据和行为标志
在 Style 上的多个布尔和数值属性控制 Word 在 UI 中如何处理样式,而非其渲染方式:Locked 在启用格式保护时阻止样式被更改,IsQuickStyle 控制其是否出现在快速样式库中,AutomaticallyUpdate 使样式从手动应用的直接格式重新定义自身,SemiHidden 和 UnhideWhenUsed 控制样式在首次使用前后在样式列表中的可见性,Priority 影响其在库中的排序顺序。当样式定义列表编号时,还会公开 List 和 ListFormat 属性,Style.Remove() 则从其 StyleCollection 中删除该样式。
提示与最佳实践
- 在查找内置样式时,优先使用带有
StyleIdentifier值的StyleCollection索引器,而不是按名称查找——名称会本地化,而StyleIdentifier值不会。 - 将
BaseStyleName设置为构建样式层级(例如,一组标题样式都从同一基础样式继承字体选择),而不是在每个样式上重复格式设置。 - 在文档之间复制样式时,使用
StyleCollection.AddCopy(style),而不是手动读取并重新应用每个格式属性。 - 为交错表格配置
TableStyle.ConditionalStyles区域,而不是在代码中手动格式化交替行——每个ConditionalStyle区域的格式是根据其ConditionalStyleType应用的,而不是在单独的行上直接设置格式。 - 在以编程方式删除或重命名样式之前检查
Style.BuiltIn;内置样式通常在文档其他位置通过名称被引用。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
StyleCollection 索引器在名称查找时返回 null | 此文档中不存在该样式名称,或者内置样式尚未使用,导致 Word 尚未实例化它。 | 检查 Style.Aliases 以获取别名,或改用带有 StyleIdentifier 的 StyleCollection 索引器来使用内置样式 |
设置 StyleName 会意外创建一个新样式 | 如果集合中尚不存在,StyleName 将创建具名样式 | 首先使用 StyleCollection 索引器确认样式是否存在,或通过 Style 属性直接分配 Style 对象 |
应用 TableStyle 后,表格带状效果未显示 | 在 TableStyle.ConditionalStyles 上从未配置条件格式化区域(OddRowBanding、EvenRowBanding 等) | 在 ConditionalStyleCollection 中对相关的 ConditionalStyle 条目设置格式 |
| 样式更改不会影响已经使用该样式的内容 | 直接(手动)格式化已叠加在样式之上并具有优先权 | 清除受影响的运行/段落上的直接格式化,或设置 Style.AutomaticallyUpdate |
FAQ
如何获取文档中所有样式的集合?
读取 Document.Styles,它返回一个包含该文档中所有内置和用户定义的 Style 的 StyleCollection。
Style 和 StyleIdentifier 有什么区别?
Style 是实际的样式对象及其格式; StyleIdentifier 是一个与区域设置无关的枚举值,用于查找特定 内置 样式,无论文档语言如何,通过 StyleCollection 索引器.
表格样式与段落或字符样式有何不同?
TableStyle 是 Style 的子类,添加了表格布局属性(Alignment、CellSpacing、padding)以及用于区域特定格式的 ConditionalStyles 集合,例如交错行、标题行和角单元格——这些格式概念不适用于段落或字符样式。
我可以创建全新的样式,而不是修改已有的样式吗?
是的——调用 StyleCollection.Add(type, name),传入所需的 StyleType 和新的名称来创建空样式,然后为其设置格式属性(Font、ParagraphFormat,以及段落/字符样式的其他属性)。
我如何复制一个样式,包括来自其他文档的样式?
使用 StyleCollection.AddCopy(style),传入一个 Style 对象(该对象可以来自另一个 Document 的 StyleCollection),将其副本添加到目标集合中。
API Reference 概要
| 类/方法 | 描述 |
|---|---|
Style | 单个内置或用户定义的段落、字符、表格或列表样式 |
StyleCollection | 文档中所有样式的集合,可通过 Document.Styles 访问 |
StyleCollection 按名称索引器 | 通过显示名称查找样式,例如 styles["Heading 1"] |
StyleCollection 按标识符索引器 | 通过与语言无关的标识符查找内置样式,例如 styles[StyleIdentifier.Heading1] |
StyleCollection.Add(type, name) | 创建一个给定 StyleType 的新空样式 |
StyleCollection.AddCopy(style) | 将现有样式复制到此集合中 |
StyleType | 用于区分 Paragraph、Character、Table 和 List 样式的枚举 |
StyleIdentifier | 内置样式的区域无关标识符 |
TableStyle | 用于表格格式化的 Style 子类,包括按区域的条件样式 |
ConditionalStyleCollection | 在 TableStyle 上的每个区域的 ConditionalStyle 条目集合 |
ConditionalStyle | 对单个表格区域的格式设置(字体、段落格式、底纹、边框、填充) |
ConditionalStyleType | 枚举,用于标识 ConditionalStyle 所适用的表格区域 |