使用xlwings从Excel调用Matplotlib绘图时遇AttributeError问题求助
问题:Excel宏通过xlwings调用Matplotlib绘制直方图时触发AttributeError
执行时出现错误:
AttributeError: module 'matplotlib' has no attribute 'get_data_path'
仅在Excel宏运行代码时触发,PyCharm IDE中运行相同代码完全正常。
已尝试的无效方案:
- 彻底卸载Anaconda,用pip重装matplotlib(排除conda与pip版本冲突)
- 使用Python虚拟环境运行
- 彻底重装Python
环境信息:
- Python版本:3.11.1
- 已安装包列表:
Package Version --------------- -------- contourpy 1.0.7 cycler 0.11.0 fonttools 4.38.0 kiwisolver 1.4.4 matplotlib 3.6.3 numpy 1.24.1 packaging 23.0 pandas 1.5.3 Pillow 9.4.0 pip 22.3.1 pyparsing 3.0.9 python-dateutil 2.8.2 pytz 2022.7.1 pywin32 305 seaborn 0.12.2 setuptools 65.6.3 six 1.16.0 wheel 0.38.4 xlwings 0.28.9
可行解决思路
- 核对Excel宏调用的Python解释器路径:Excel宏中指定的Python路径可能与PyCharm使用的不一致,即使重装Python,宏的路径可能未更新。检查xlwings配置文件(如
xlwings.conf)或宏代码中的Python路径,确保指向当前使用的3.11.1版本的python.exe。 - 手动指定Matplotlib数据路径:在代码开头添加以下代码,强制指定Matplotlib的数据目录,规避环境变量读取异常:
import matplotlib # 优先尝试自动获取路径 try: matplotlib.rcParams['datapath'] = matplotlib.get_data_path() except AttributeError: # 手动填写mpl-data的实际路径,替换为你的路径 matplotlib.rcParams['datapath'] = r"C:\Users\你的用户名\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\matplotlib\mpl-data" - 切换Matplotlib后端为非交互式:Excel宏环境不支持交互式后端,在代码开头添加:
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt - 以管理员权限运行Excel:Excel运行时的权限可能无法读取Matplotlib的数据目录,右键点击Excel图标选择「以管理员身份运行」后再执行宏。
- 降级Matplotlib版本:当前3.6.3版本可能与xlwings 0.28.9存在兼容性问题,尝试降级到3.5.x版本:
pip uninstall matplotlib -y pip install matplotlib==3.5.3 - 检查xlwings配置文件:确认
xlwings.json中没有错误覆盖Python环境设置,比如是否指定了错误的解释器路径。
内容的提问来源于stack exchange,提问作者Adel Moustafa
相关产品推荐
相关产品推荐

