错误提示:
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 方法内)
至此问题成功解决。