学习C#调用OpenXml操作word文档的基本用法(14:学习文档编号定义类)

OpenXml中使用NumberingDefinitionsPart类保存Word文档的列表和编号定义,以便在正文中引用,当在Word文档中创建项目符号列表、编号列表或多级列表时,其格式和规则就存储在该类中。采用解压缩软件打开Word文档,其内的word文件夹中有独立的numbering.xml文件,用于保存文档中使用的编号信息,如下图所示:

  NumberingDefinitionsPart类的Numbering属性保存编号定义,主要包括抽象编号定义 (AbstractNum) 和编号实例定义 (NumberingInstance)两类数据,也即上图中间圈红的w:abstractNum和w:num。
  AbstractNum类定义编号模板,包括编号的外观和行为,主要包括以下属性。虽然AbstractNum类包含完整的编号规则,但不能直接应用于文档正文 。

序号 名称 说明
1 AbstractNumberId 抽象编号定义ID,也即抽象编号的唯一标识符
2 AbstractNumDefinitionName 抽象编号定义名称
3 MultiLevelType 抽象编号定义类型,从枚举值MultiLevelType内取值,包括SingleLevel(单级列表)、Multilevel(多级列表)、HybridMultilevel(混合多级列表)等值
4 Nsid 抽象编号定义标识符,该属性将唯一的十六进制ID关联到父抽象编号定义。对于基于同一初始编号定义的两个抽象编号定义,此数字应相同,如果文档被重新使用,并且基础编号定义已更改,则它应保留其原始 nsid
5 NumberingStyleLink 编号样式参考,可选字符串,该属性指定一抽象编号,该抽象编号不包含其编号类型的实际编号属性,而是充当对存储在文档中的编号样式的引用,该样式应在引用此抽象编号定义时应用,并且本身指向要使用的实际基础抽象编号定义
6 StyleLink 编号样式定义
7 TemplateCode 编号模板代码

AbstractNum类包含Level类集合(可通过调用Elements<Level>函数获取),Level类用于定义编号规则中每个级别的格式,其主要属性包括:

序号 名称 说明
1 LevelIndex 编号级别索引,从0开始
2 TemplateCode 模板代码(GUID),用于模板继承
3 Tentative 是否为暂定级别
4 StartNumberingValue 起始编号值
5 NumberingFormat 编号格式类型,从枚举值NumberFormatValues内取值,如UpperLetter、Ordinal等
6 LevelRestart 重启编号级别索引,该属性指定一个从 1 开始的索引,该索引确定何时应将编号级别索引重新启动到其起始值 。 当指定编号级别的实例(该实例应高于此级别 (在给定文档的内容中使用) )时,将重新启动编号级别。
7 ParagraphStyleIdInLevel 指定与此编号级别关联的段落样式ID
8 IsLegalNumberingStyle 是否使用阿拉伯数字显示所有级别,该属性指定是否应使用十进制数字格式显示给定编号级别文本之前显示的所有级别,而不考虑列表中该级别的实际数字格式
9 LevelSuffix 编号符号和段落文本之间的内容,从枚举值LevelSuffixValues内取值,如Tab、Space等
10 LevelText 编号级别文本,该属性的所有文本应被视为在此编号级别的每个实例中重复的文本文本,但使用百分比符号 (%) 后跟一个数字除外,该数字应用于指示在此级别中使用的数字的从1开始的索引。使用 % 语法时,该级别的每个后续段落的数量应递增, 直到在此级别的两个后续段落之间看到重启级别。举例而言,加入当前编号级别索引为4,编号级别文本为"%1.%2.%3.%4.%5.",其中的%5对应当前级别编号,%4对应上一级别的编号(5-4=1),%3对应上二级别的编号(5-3=2) ,以此类推
11 LevelPictureBulletId 图片项目符号的 ID
12 LegacyNumbering 旧编号级别属性,该属性指定给定的编号级别来自早期的word程序
13 LevelJustification 编号对齐方式,从枚举值LevelJustificationValues内取值,如Left、Center、Right等
14 PreviousParagraphProperties 编号级别关联的段落属性,类型为PreviousParagraphProperties ,其内的属性说明请对照参考文献5
15 NumberingSymbolRunProperties 编号符号的字符格式,类型为NumberingSymbolRunProperties ,其内的属性说明请对照参考文献6

NumberingInstance类定义编号实例,该类通过属性AbstractNumId与抽象编号定义模板关联,同时自身属性NumberID保存实例ID,用于在正文中设置段落编号时引用。
  NumberingInstance类支持添加LevelOverride类集合(可通过调用Elements<LevelOverride>函数获取),LevelOverride类用于在编号实例中覆盖抽象编号的特定级别属性,其主要属性包括:

序号 名称 说明
1 LevelIndex 设置要覆盖的级别索引
2 StartOverrideNumberingValue 设置要覆盖的级别的起始编号值
3 Level 该属性有值时,会完全替换抽象编号中对应编号级别的设置

参考文献

1\]https://github.com/dotnet/Open-XML-SDK \[2\]https://learn.microsoft.com/zh-cn/office/open-xml/open-xml-sdk \[3\]https://learn.microsoft.com/zh-cn/dotnet/api/documentformat.openxml.wordprocessing.style?view=openxml-3.0.1 \[4\]https://blog.csdn.net/i042416/article/details/126228816 \[5\]https://blog.csdn.net/gc_2299/article/details/154045042 \[6\]https://blog.csdn.net/gc_2299/article/details/154043115

相关推荐
E_ICEBLUE17 小时前
在 Python 中对比 Word 文档:自动生成修订报告
python·word
大模型RAG和Agent技术实践17 小时前
破译Word文档的“语义黑盒”:企业级DOCX RAG架构演进与全链路实战(完整源代码)
人工智能·架构·大模型·word·智能问答·rag
superior tigre19 小时前
word参考文献交叉引用的方法(包括批量把交叉引用改为上标、保留跳转功能到pdf)
word
我喜欢就喜欢20 小时前
Word 模板匹配与样式同步技术详解
开发语言·c++·qt·word·模板匹配
拾穗哥1 天前
wps/word行距不正常调整
word·wps
重生之光头强下海当程序猿2 天前
调整word中的序号格式(缩进,起始值,序号与文字的间距等
前端·css·word
Eiceblue3 天前
C# 中如何设置 Word 文档页面?(页面大小、边距、方向自动化控制)
c#·自动化·word·visual studio
热爱生活的五柒4 天前
Word 论文里参考文献经常在修改后错乱,如何解决
word
醉酒柴柴4 天前
word创建样式以后应用于所有新文件
开发语言·学习·c#·word
珞瑜·4 天前
Windows版Word如何启用保存时自动删除个人信息
word