解决Python xlwings报错AttributeError 'NoneType' object has no attribute apps

一、问题背景

今天,遇到了一个问题:以前调试好的python使用xlwings操作wps表格的脚本突然不能运行了,遇到了很多莫名问题,下面记录分享下:

开始报错如下:

bash 复制代码
D:\PycharmProjects\tiku\venv\Scripts\python.exe D:/PycharmProjects/tiku/myPyXlwings.py
Traceback (most recent call last):
  File "D:/PycharmProjects/tiku/myPyXlwings.py", line 717, in <module>
    myXwBook = myPyXwBook(xlsxFilePath)
  File "D:/PycharmProjects/tiku/myPyXlwings.py", line 71, in __init__
    self.app = xw.App(visible=False, add_book=False)
  File "D:\PycharmProjects\tiku\venv\lib\site-packages\xlwings\main.py", line 310, in __init__
    self.impl = engines.active.apps.add(
AttributeError: 'NoneType' object has no attribute 'apps'
加载excel文件不存在!自动创建文件!

在网上查找了很长时间,找到如下面解决方法:

把这句代码

python 复制代码
app = xw.App(visible=False, add_book=False)

修改如下

python 复制代码
# pip install xlwings -i https://pypi.tuna.tsinghua.edu.cn/simple
import xlwings as xw

# 1.下面这句是第1句共4句,引入pywin32包中的win32com.client
from win32com.client import Dispatch

# 2.下面这句是第2句共4句,这4句代替用Office打开Excel那句,改用WPS打开Excel。
xl = xw._xlwindows.COMRetryObjectWrapper(Dispatch("Ket.Application"))

# 3.下面这句是第3句共4句,这4句代替用Office打开Excel那句,改用WPS打开Excel。
impl = xw._xlwindows.App(visible=False, add_book=False, xl=xl)

# 4.下面这句是第4句共4句,这4句代替用Office打开Excel那句,改用WPS打开Excel。
app = xw.App(visible=False, add_book=False, impl=impl)

但是,修改对应代码运行后报错如下:

bash 复制代码
D:\PycharmProjects\tiku\venv\Scripts\python.exe D:/PycharmProjects/tiku/myPyXlwings2.py
Traceback (most recent call last):
  File "D:/PycharmProjects/tiku/myPyXlwings2.py", line 16, in <module>
    from win32com.client import Dispatch
  File "D:\PycharmProjects\tiku\venv\lib\site-packages\win32com\__init__.py", line 8, in <module>
    import pythoncom
  File "D:\PycharmProjects\tiku\venv\lib\site-packages\pythoncom.py", line 2, in <module>
    import pywintypes
  File "D:\PycharmProjects\tiku\venv\lib\site-packages\win32\lib\pywintypes.py", line 126, in <module>
    __import_pywin32_system_module__("pywintypes", globals())
  File "D:\PycharmProjects\tiku\venv\lib\site-packages\win32\lib\pywintypes.py", line 116, in __import_pywin32_system_module__
    mod = importlib.util.module_from_spec(spec)
ImportError: DLL load failed while importing pywintypes: 找不到指定的模块。

pip安装对应模块

bash 复制代码
pip install pywintypes

或者

pip install pypiwin32

又折腾很长时间,突然想到从一个最简单的xlwings操作wps表格的代码脚本调试,如下:

main.py

python 复制代码
import xlwings as xw

wb = xw.Book()  # 这将创建一个新的工作簿
sht = wb.sheets['Sheet1']   # 实例化工作表对象
print(sht.range('A1').value)   # 读取单元格

又报出下面错误:

bash 复制代码
xlwings.XlwingsError: Make sure to have "pywin32", a dependency of xlwings,

可以判断出xlwings依赖的pywin32模块不兼容。

二、pywin32下载

查看pywin32版本是最新的306版本。先卸载以前安装的pywin32版本,我尝试把pywin32版本降级,300版本不可以,228版本可以。

pywin32下载地址:

github.com/mhammond/py...

下载速度很慢,可以使用迅雷下载。

三、总结

从这个问题可以看出,是因为pywin32版本不兼容问题引起的,如果我写代码,调试完成后,把python模块依赖版本导出做下记录,就可以避免这种问题了。

四、PyCharm依赖包导入导出方法

在PyCharm的terminal中输入:

1.将依赖包导出至requirements文件

bash 复制代码
pip freeze > requirements.txt

2.从requirements文件中导入依赖包

bash 复制代码
pip install -r requirements.txt

这是我自己导出的

bash 复制代码
altgraph==0.17.4
click==8.1.7
colorama==0.4.6
et-xmlfile==1.1.0
importlib-metadata==7.0.1
openpyxl==3.1.2
packaging==23.2
pefile==2023.2.7
pyinstaller==6.3.0
pyinstaller-hooks-contrib==2024.0
pypiwin32==223
PyQt5==5.15.9
pyqt5-plugins==5.15.9.2.3
PyQt5-Qt5==5.15.2
PyQt5-sip==12.13.0
pyqt5-tools==5.15.9.3.3
python-dotenv==1.0.1
pywin32==228
qt5-applications==5.15.2.2.3
qt5-tools==5.15.2.1.3
sip==6.8.1
tomli==2.0.1
xlwings==0.30.13
zipp==3.17.0

相关推荐
Loo国昌2 分钟前
【LangChain1.0】第九阶段:文档处理工程 (LlamaIndex)
人工智能·后端·python·算法·langchain
抠头专注python环境配置36 分钟前
基于Python与深度学习的智能垃圾分类系统设计与实现
pytorch·python·深度学习·分类·垃圾分类·vgg·densenet
愈努力俞幸运1 小时前
flask 入门 token, headers,cookie
后端·python·flask
梦想是成为算法高手1 小时前
带你从入门到精通——知识图谱(一. 知识图谱入门)
人工智能·pytorch·python·深度学习·神经网络·知识图谱
用什么都重名1 小时前
Conda 虚拟环境安装配置路径详解
windows·python·conda
阿也在北京1 小时前
基于Neo4j和TuGraph的知识图谱与问答系统搭建——胡歌的导演演员人际圈
python·阿里云·知识图谱·neo4j
计算机徐师兄1 小时前
Python基于知识图谱的胆囊炎医疗问答系统(附源码,文档说明)
python·知识图谱·胆囊炎医疗问答系统·python胆囊炎医疗问答系统·知识图谱的胆囊炎医疗问答系统·python知识图谱·医疗问答系统
北冥码鲲1 小时前
【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱
python·知识图谱·neo4j
B站计算机毕业设计超人1 小时前
计算机毕业设计Python+大模型音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 知识图谱 大数据毕业设计
人工智能·hadoop·爬虫·python·数据分析·知识图谱·课程设计