解决 python xlrd 读取xls文件的 BIFF21 错误 (不规则xls文件读取错误问题)

本文解决了xlrd在读取特定xls文件时遇到的格式不规则问题,通过修改源码支持更多版本并调整断言异常,成功读取超过16384行的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误提示:

XLRDError: Unsupported format, or corrupt file: BOF not workbook/worksheet: op=0x0009 vers=0x0002 strm=0x000a build=0 year=0 -> BIFF21

 

用 xlrd 和 xlwt 读写xls文件,遇到文件读取错误。奇怪的是同一类似的文档,有些能正常读取,有些不行。

经检查,原是文件格式不规则, 不是常规的xls格式,文件读取失败

使用过多种方法, 如 xlrd, pyExcel, openpyxl   均不能解决问题,且出错信息不同。

自已跟踪源码查看,发现报错是出在 book模块的get_bof 函数上

如下图,不符合这两个条件就抛出异常

查看源码 version 21 是正常的版本码

SUPPORTED_VERSIONS = (80, 70, 50, 45, 40, 30, 21, 20)

那解决方法就很简单,增加第三个条件为

        if version == 21:
            return version

如图

重新执行

xlrd.open_workbook(filename, encoding_override='gbk')            # 不要忘记加第二个参数

OK,正常读取!

------------------------------------------------------------------

原以为问题,已解决。 BUT~~~~~

还是太小看BUG了, 脚本执行今天遇到一个文件, 死活读不出来。

报错信息如图

AssertionError  断言异常, 看样子是超出条数限制了。

然后一查看, ORZ~~ 有坑

小于80版本的,最大读取数才 16384, 文件里数据有两万多条。

经过反反复复的试验,终于~~解决(一把辛酸泪)。 办法也是简单

 

把这个断言异常注释掉就可以了。(位于 sheet 模块 put_cell_unragged 方法内)

 

至此问题成功解决。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值