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

相关推荐
鸡鸭扣28 分钟前
Docker:3、在VSCode上安装并运行python程序或JavaScript程序
运维·vscode·python·docker·容器·js
paterWang1 小时前
基于 Python 和 OpenCV 的酒店客房入侵检测系统设计与实现
开发语言·python·opencv
东方佑1 小时前
使用Python和OpenCV实现图像像素压缩与解压
开发语言·python·opencv
神秘_博士2 小时前
自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone
arm开发·python·物联网·flutter·docker·gitee
Moutai码农3 小时前
机器学习-生命周期
人工智能·python·机器学习·数据挖掘
小白教程4 小时前
python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公
python·python学习·python安装
武陵悭臾4 小时前
网络爬虫学习:借助DeepSeek完善爬虫软件,实现模拟鼠标右键点击,将链接另存为本地文件
python·selenium·网络爬虫·pyautogui·deepseek·鼠标右键模拟·保存链接为htm
代码猪猪傻瓜coding5 小时前
关于 形状信息提取的说明
人工智能·python·深度学习
码界筑梦坊6 小时前
基于Flask的第七次人口普查数据分析系统的设计与实现
后端·python·信息可视化·flask·毕业设计
微笑的Java6 小时前
Python - 爬虫利器 - BeautifulSoup4常用 API
开发语言·爬虫·python