2024.5.31更新2点:1、发现有些中文自动编号不是叫chineseCounting,后面还带了thousand什么的,所以 if num_fmt == "chineseCounting" 要改为 if "chineseCounting" in num_fmt。2、之前对自动编号假设只有3级,虽然看起来数字是连续的,但实际上每个都可能是一组新的自动编号的第一个,对此,修正后对应代码应为:
start_lv123 = [i*0 for i in range(len(List_of_dict))] #原本是start_lv123=[0,0,0]
for k in range(len(List_of_dict)):
if "start" in List_of_dict[k].keys():
start_lv123[k]=int(List_of_dict[k]["start"].split('\'')[0])
我的上一次文章大概说明了基于docx库解决自动编号识别问题的原理和结论(参见上一篇文章http://t.csdnimg.cn/gozU9),在这篇文章进一步说明一些细节问题,最后附上代码。
我这里有一个text.docx文档(见下图),带有2级自动编号:一、二、 以及1.2. 。以此为例说明。
一、记载“文档自动编号样式信息”的位置在哪里?
自动编号的种类、样式等信息储存在numbering.xml当中(每个docx都是一个zip,手动改变后缀名后可打开压缩包,找到/word/numbering.xml这个文件)。最上层的节点叫numbering,下面与4个节点,分别是2个num和2个abstractNum。每个num节点记录了某个numId值与某个abstractNumId 值的对应关系。节点abstractNum记录了每一个abstractNumId 值对应的自动编号长成什么样、起始序号是几、序号是中文还是数字等等信息。