如何在 .NET 中使用样式

如何在 .NET 中使用样式

本指南展示了如何在 Aspose.Words FOSS 用于 .NET,使用 Style, StyleCollection,以及 TableStyle 类。它涵盖了读取文档的样式集合、跨语言可靠地查找样式、将样式应用于段落和文本运行、创建和复制样式,以及在表格样式上配置区域条件格式。

分步指南

步骤 1:安装包

Aspose.Words FOSS for .NET 尚未发布 NuGet 包——请改为从源码构建库。克隆 https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git,然后使用 .NET SDK 在 Release 配置下构建 Aspose.Words.sln,并在项目中引用生成的 Aspose.Words 程序集。该库目标为 .NET Standard 2.0,因此可在 .NET Framework 4.6.2+ 和 .NET 6/8/10 上运行。


步骤 2:导入所需类

添加一个 using Aspose.Words; 指令——Style、StyleCollection、TableStyle、StyleType、StyleIdentifier、ConditionalStyle、ConditionalStyleCollection 和 ConditionalStyleType 都位于 Aspose.Words 命名空间中,与 Document 同在。


步骤 3:读取文档的样式集合

Document.Styles 返回一个 StyleCollection —— 文档中附加的每个内置和用户定义的 Style。StyleCollection.Count 报告它包含的样式数量,DefaultFont / DefaultParagraphFormat 描述文档范围的默认格式,新内容在应用任何显式样式之前会继承该默认格式。


步骤 4:可靠地查找样式

使用 StyleCollection 索引器 styles[name] 通过显示名称检索样式。对于内置样式,建议改用相同的索引器并使用 StyleIdentifier 枚举值 —— styles[sti] —— 名称是本地化的,但 StyleIdentifier 值不是,因此无论文档语言如何,使用标识符查找的方式相同。如果索引器未找到预期的样式,请检查 Style.Aliases,了解 Word 对同一样式识别的备用名称;在以编程方式删除或重命名样式之前,请检查 Style.BuiltIn,因为内置样式通常在文档其他位置通过名称被引用。


步骤 5:将样式应用于段落或运行

携带样式的格式对象同时公开一个 Style 属性(即 Style 对象本身)和一个 StyleName 属性(通过名称解析或创建样式的快捷方式)。设置 ParagraphFormat.Style 或 ParagraphFormat.StyleName 以应用段落样式,设置 Font.Style 或 Font.StyleName 以将字符样式应用于运行的格式。将 StyleName 赋予集合中不存在的名称会创建该样式——首先使用 StyleCollection 索引器确认样式是否已存在,或者直接赋值 Style 对象,如果这不是预期的行为。


步骤 6:构建样式层次结构

读取 BaseStyleName 以查找给定样式继承未设置格式的来源样式,LinkedStyleName 用于配对的段落/字符样式(如 Word 为内置样式定义的标题及其关联字符样式),NextParagraphStyleName 用于 Word 为在使用此样式的段落之后新键入的段落分配的样式。定义一组相关样式时设置 BaseStyleName——例如一系列标题样式应全部从同一基础样式继承字体选择——而不是在每个样式上重复相同的格式。


步骤 7:创建或复制样式

调用 StyleCollection.Add(type, name),提供一个 StyleType(Paragraph、Character、Table 或 List)和一个名称,以创建一个新的空样式,然后根据需要设置其 Font 和 ParagraphFormat 属性。要复制现有样式——包括来自不同 Document 的 StyleCollection 的样式——请调用 StyleCollection.AddCopy(style),而不是手动读取并重新应用每个格式属性。调用 Style.Remove() 可从其集合中删除样式。


步骤 8:配置表格样式和条件格式

TableStyle 在 Style 的基础上扩展了表布局属性——Alignment、CellSpacing、LeftIndent、Shading、VerticalAlignment,以及四个填充属性(LeftPadding、RightPadding、TopPadding、BottomPadding)——再加上 RowStripe 和 ColumnStripe,用于控制条纹图案在多少行或列上重复。若要进行按区域格式化,请配置 TableStyle.ConditionalStyles——一个保存每个区域一个 ConditionalStyle 的 ConditionalStyleCollection:FirstRow、LastRow、FirstColumn、LastColumn、OddRowBanding、EvenRowBanding、OddColumnBanding、EvenColumnBanding,以及四个角单元格(TopLeftCell、TopRightCell、BottomLeftCell、BottomRightCell)。每个 ConditionalStyle 拥有其自己的 Font、ParagraphFormat、Shading、Borders 和单元格填充,并由 Type 报告它代表的 ConditionalStyleType 区域;在这些区域上设置格式,而不是在单独的表格行上设置,以获得在表格编辑后仍然有效的条纹、标题行或角单元格格式。


步骤 9:重置或移除格式

调用 ConditionalStyle.ClearFormatting() 可重置单个条件区域,或调用 ConditionalStyleCollection.ClearFormatting() 一次性重置 TableStyle 上的所有区域。StyleCollection.ClearQuickStyleGallery() 会从 Word UI 的快速样式库中移除所有样式,但不删除样式本身——这对于在不影响文档内容的情况下精简库非常有用。

常见问题与解决方案

StyleCollection 索引器在名称查找时返回 null 此文档中不存在该样式名称,或者内置样式尚未使用,因此 Word 尚未实例化它。检查 Style.Aliases 以获取备用名称,或使用 the StyleCollection 带有 a 的索引器 StyleIdentifier 改为使用内置样式。

设置 StyleName 会意外创建新样式 StyleName 如果集合中不存在,则创建指定名称的样式。使用 StyleCollection 先使用索引器确认样式是否存在,或分配 Style 对象直接通过 Style 属性,而不是 StyleName.

应用 TableStyle 后,表格分段未出现 条件格式化区域 – OddRowBanding, EvenRowBanding,以及类似的 – 从未在 TableStyle.ConditionalStyles. 在相关的 ConditionalStyle 条目中 ConditionalStyleCollection.

样式更改不会影响已使用该样式的内容 直接(手动)格式应用于样式之上时优先于样式本身的设置。清除受影响的运行或段落上的直接格式,或设置 Style.AutomaticallyUpdate 以便样式从该手动格式重新定义自身。

内置样式查找在用其他语言撰写的文档中失败 该 StyleCollection 当使用名称调用时,索引器匹配显示名称(该名称已本地化)。 StyleIdentifier 请改用对应的枚举值,因为该标识符与语言环境无关。

常见问题

如何获取文档中所有样式的集合?

阅读 Document.Styles,它返回一个 StyleCollection,其中包含该文档中所有内置和用户自定义的 Style。

Style 与 StyleIdentifier 有何区别?

Style 是具有其格式的实际样式对象;StyleIdentifier 是一个与语言无关的枚举值,用于通过 StyleCollection 索引器查找特定的内置样式,而不受文档语言的影响。

表格样式与段落或字符样式有何不同?

TableStyle 是 Style 的子类,添加了表格布局属性(Alignment、CellSpacing、padding)以及用于区域特定格式的 ConditionalStyles 集合,例如交错行、标题行和角落单元格——这些格式概念不适用于段落或字符样式。

我可以创建全新的样式,而不是修改已有的样式吗?

可以——调用 StyleCollection.Add(type, name) 并提供所需的 StyleType 和新名称来创建一个空样式,然后设置其格式属性(Font、ParagraphFormat 等,用于段落或字符样式)。

我如何复制一个样式,包括来自其他文档的样式?

调用 StyleCollection.AddCopy(style),传入一个 Style 对象——该对象可以来自另一个 Document 的 StyleCollection——将其副本添加到目标集合中。

另请参阅

 中文