一、问题背景
今天,遇到了一个问题:以前调试好的python使用xlwings操作wps表格的脚本突然不能运行了,遇到了很多莫名问题,下面记录分享下:
开始报错如下:
在网上查找了很长时间,找到如下面解决方法:
把这句代码
1 2 |
app = xw.App(visible=False, add_book=False) |
修改如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 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) |
但是,修改对应代码运行后报错如下:
pip安装对应模块
1 2 3 4 5 6 |
pip install pywintypes 或者 pip install pypiwin32 |
又折腾很长时间,突然想到从一个最简单的xlwings操作wps表格的代码脚本调试,如下:
main.py
1 2 3 4 5 6 |
import xlwings as xw wb = xw.Book() # 这将创建一个新的工作簿 sht = wb.sheets['Sheet1'] # 实例化工作表对象 print(sht.range('A1').value) # 读取单元格 |
又报出下面错误:
1 2 |
xlwings.XlwingsError: Make sure to have "pywin32", a dependency of xlwings, |
可以判断出xlwings依赖的pywin32模块不兼容。
二、pywin32下载
查看pywin32版本是最新的306版本。先卸载以前安装的pywin32版本,我尝试把pywin32版本降级,300版本不可以,228版本可以。
pywin32下载地址:
https://github.com/mhammond/pywin32
下载速度很慢,可以使用迅雷下载。
三、总结
从这个问题可以看出,是因为pywin32版本不兼容问题引起的,如果我写代码,调试完成后,把python模块依赖版本导出做下记录,就可以避免这种问题了。
四、PyCharm依赖包导入导出方法
在PyCharm的terminal中输入:
1.将依赖包导出至requirements文件
1 2 |
pip freeze > requirements.txt |
2.从requirements文件中导入依赖包
1 2 |
pip install -r requirements.txt |
这是我自己导出的
1 2 3 4 5 6 7 |
openpyxl==3.1.2 pypiwin32==223 pywin32==228 sip==6.8.1 tomli==2.0.1 xlwings==0.30.13 |