解决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

相关推荐
青 春 记 忆3 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO33 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO5 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白6 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲7 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)9 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机9 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor6929 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy10 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽11 小时前
真实即粗糙,光滑是伪造
人工智能·python