NPOI的XWPFParagraph对象中,是无法直接读取段落编号的,然而可以读取的是编号的样式名称(GetNumFmt),编号分组ID(GetNumID),编号样式(NumLevelText)等。具体如下:
/* * 若干格式信息 * GetNumFmt: decimal, GetNumID: 1, GetNumIlvl: 0, NumLevelText: %1. => 1. * GetNumFmt: decimal, GetNumID: 4, GetNumIlvl: 0, NumLevelText: %1) => 1) * GetNumFmt: chineseCountingThousand, GetNumID: 2, GetNumIlvl: 0, NumLevelText: (%1) => (一) * GetNumFmt: chineseCountingThousand, GetNumID: 3, GetNumIlvl: 0, NumLevelText: %1、 => 一、 * GetNumFmt: upperLetter, GetNumID: 5, GetNumIlvl: 0, NumLevelText: %1. => A. * GetNumFmt: decimal, GetNumID: 6, GetNumIlvl: 0, NumLevelText: %1、 => 1、 */
于是封装了段落编号的处理类,几个关键点:
1、考虑频繁调用,使用单例。
2、依照NumLevelText内容替换编号的样式
3、编号分组发生变化时,编号要重置为1,采用字典记录
4、汉字、字母统一处理为数字编号
5、读取一个新Word时,字典内容要清空
段落处理类:
1 /// <summary> 2 /// 段落处理类 3 /// Author: Matsuyoi 4 /// </summary> 5 class ParagraphNumHandle 6 { 7 #region 封装为单例 8 private static ParagraphNumHandle singleton = null; 9 public static ParagraphNumHandle GetInstance() 10 { 11 if (singleton == null) 12 singleton = new ParagraphNumHandle(); 13 //获取单例后重置一次变量 14