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

一、 本文实现内容 用于解析excel2013数据文件的标题行,有下面需求 1、 标题行可能处在页面的任何位置 2、 标题行只能是字符串类型,最少有2个或以上字段 3、 标题行上边,或左边可能有任意多个空行 4、 标题行可能是多行,一个字段可能有N级子字段,可以是任意复杂的数据报表标题,例如财务数据的损益表 5、 标题行不能独立存在,最少有一个数据行,最少有一个字段不为空 ...
摘要由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:字段
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值