python3.5版本使用openpyxl报‘NoneType‘ object has no attribute ‘read‘问题

在新装的ubuntu16.04系统使用默认的python3.5时,需要用到openpyxl,于是直接按照下述指令装载

sudo pip3 install openpyxl

使用时,会提示版本不匹配,百度搜索,说openpyxl的3.x.x版本已不再支持python3.5,起码要使用python3.6。

考虑到新装机的普适性,尝试寻找python3.5适配的解决办法,百度到一个说指定版本2.6.0就可以。

sudo pip3 install openpyxl==2.6.0

发现可以import使用了。

但是在调用程序时,在wb.save(full_path)时又报了错误:AttributeError: 'NoneType' object has no attribute 'read',如下图所示。

wb.save(full_path)
  File "/usr/local/lib/python3.5/dist-packages/openpyxl/workbook/workbook.py", line 396, in save
    save_workbook(self, filename)
  File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 295, in save_workbook
    writer.save()
  File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 276, in save
    self.write_data()
  File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 76, in write_data
    self._write_worksheets()
  File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 226, in _write_worksheets
    self._write_comment(ws)
  File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 180, in _write_comment
    vml = fromstring(self.workbook.vba_archive.read(ws.legacy_drawing))
AttributeError: 'NoneType' object has no attribute 'read'

开始搜到的解决办法:在打开文件时,带上参数keep_vba=True

wb = load_workbook(full_path, keep_vba=True)

这样修改后执行确实没问题了,但是重复执行时,又报错了,且搜索的解答中有留言说多次执行后,文件就损坏打不开了。所以这个解决办法并不是最终的解决办法。

继续搜索找解决办法,外网有留言说这就是个bug,已在后续的版本中解决了。

回想自己为了适配ubuntu16.04默认的python3.5版本,装载openpyxl时,指定了版本2.6.0(也是百度搜到的解决办法),所以可能用新的版本就可以解决这个问题。

openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.0.10 documentation

官网上找到各个版本的介绍:https://openpyxl.readthedocs.io

发现2.6.x系列最终的版本是2.6.4版本,确认一下是否支持python3.5,明确的说明了支持python2.7和python3.5,所以嘛,重新装载2.6.4版本:

sudo pip3 install openpyxl==2.6.4

 问题彻底搞定。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值