• 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',如下图所示。

    1. wb.save(full_path)
    2. File "/usr/local/lib/python3.5/dist-packages/openpyxl/workbook/workbook.py", line 396, in save
    3. save_workbook(self, filename)
    4. File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 295, in save_workbook
    5. writer.save()
    6. File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 276, in save
    7. self.write_data()
    8. File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 76, in write_data
    9. self._write_worksheets()
    10. File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 226, in _write_worksheets
    11. self._write_comment(ws)
    12. File "/usr/local/lib/python3.5/dist-packages/openpyxl/writer/excel.py", line 180, in _write_comment
    13. vml = fromstring(self.workbook.vba_archive.read(ws.legacy_drawing))
    14. 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

     问题彻底搞定。

    
                    
  • 相关阅读:
    Centos7下MongoDB安装到基本命令的学习
    ELK日志采集系统
    小白终于解决了在学习Go中不知道Makefile是什么的难题
    李航老师《统计学习方法》第四章阅读笔记
    verilator的第一个程序,注意流程和命令
    合取范式可满足性问题:CDCL(Conflict-Driven Clause Learning)算法详解
    Java中的堆和栈
    SDK 控件
    【面试题】 JS手写ES6的Object.create方法
    linux driver i2c core driver
  • 原文地址:https://blog.csdn.net/zerfew/article/details/126155530