python解析excel文件多级标题嵌套行

本文介绍了如何使用Python的xlrd库解析带有多级标题行的Excel2013数据文件。内容涵盖标题行的识别、数据类型的处理、递归处理多级字段,以及在复杂报表结构中自动识别标题行和数据行的方法。
摘要由CSDN通过智能技术生成

一、 本文实现内容
用于解析excel2013数据文件的标题行,有下面需求
1、 标题行可能处在页面的任何位置
2、 标题行只能是字符串类型,最少有2个或以上字段
3、 标题行上边,或左边可能有任意多个空行、空列
4、 标题行可能是多行,一个字段可能有N级子字段,可以是任意复杂的数据报表标题,例如财务数据的损益表
5、 标题行不能独立存在,最少有一个数据行,最少有一个字段不为空
6、 页面可能任何多个数据表格,可以自动识别标题行与数据行

二、 说明
限于篇幅,本文只作标题行解析,数据行解析更加复杂,见另一篇文档。
三、 实现原理
1、 采用xlrd工具读取excel2013的xlsx格式数据
2、 excel格子的数据类型有5种,无论是那一种工具都相同,包括java的poi
1) ctype=0
empty,为空
2) ctype=1
字符串,要能识别空字符串
3) ctype=2
数字,所有整数自动为浮点数xxx.00,读取回来要转换
空格,可能读取为0.0,需要自动识别,并转换
4) ctype=3
为日期,返回的数据为xxxx.yyy
需要采用python的datetime进行自动转换,可能有时间,也可能没有时间,需要自动识别
5) ctype=4
boolean类型
6) ctype=5
error类型

3、 多级字段,通过递归实现
4、 多级字段显示输出
覆盖str,并递归实现
要按逐级显示输出,类似xml数据树输出
5、 先识别标题行,后识别数据行
标题行数据格数据类型ctype=1,采用str.strip()清首尾空格
一个标题字段可能占用N行,M列,需要自动识别单元格合并

四、 最终解析效果如下




runfile('D:/python/workspace/excel2013/ParseExcelTitleRow.py', wdir='D:/python/workspace/excel2013')
tirowNum=5 endCol=31 ncols=31
字段序号=1
field:字段A,fieldPos=[5, 5, 5, 1]
字段序号=2
field:字段B,fieldPos=[5, 6, 5, 1]
字段序号=3
field:字段1,fieldPos=[5, 7, 5, 5]
字段序号=4
field:字段2,fieldPos=[5, 12, 1, 6]
        subField,field:字段21,fieldPos=[6, 12, 1, 4]
                subField,field:211,fieldPos=[7, 12, 1, 2]
                        subField,field:2111,fieldPos=[8, 12, 2, 1]
                        subField,field:2112,fieldPos=[8, 13, 2, 1]
                subField,field:212,fieldPos=[7, 14, 3, 1]
                subField,field:213,fieldPos=[7, 15, 3, 1]
        subField,field:22,fieldPos=[6, 16, 4, 1]
        subField,field:字段23,fieldPos=[6, 17, 4, 1]
字段序号=5
field:字段3,fieldPos=[5, 18, 1, 2]
        subField,field:字段31,fieldPos=[6, 18, 4, 1]
        subField,field:字段32,fieldPos=[6, 19, 4, 1]
字段序号=6
field:字段3A,fieldPos=[5, 20, 5, 1]
字段序号=7
field:字段3B,fieldPos=[5, 21, 5, 1]
字段序号=8
field:字段4,fieldPos=[5, 22, 1, 7]
        subField,field:字段41,fieldPos=[6, 22, 1, 4]
                subField,field:字段411,fieldPos=[7, 22, 1, 3]
                        subField,field:字段4111,fieldPos=[8, 22, 1, 2]
                                subField,field:字段41111,fieldPos=[9, 22, 1, 1]
                                subField,field:字段41112,fieldPos=[9, 23, 1, 1]
                        subField,field:字段4112,fieldPos=[8, 24, 2, 1]
                subField,field:字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值