You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Excel内使用openpyxl报错“File not found”但在Spyder中运行正常

在Excel内使用openpyxl报错“File not found”但在Spyder中运行正常

我完全懂你这种挫败感——同样的代码在Spyder里能顺利生成表格图片,放到Excel自带的Python(=py)环境里就报文件找不到,明明路径也核对过,权限也开了,就是不行。先帮你梳理下问题核心,再给几个针对性的解决办法:

问题回顾

你想要实现的是:在Excel内用Python脚本读取当前文件里的命名区域,生成表格图片并插入到单元格中。代码在Spyder运行正常,但在Excel内执行时,openpyxl抛出FileNotFoundError,你已经尝试过:

  • 切换路径分隔符(/、\、\\)
  • 使用原始字符串前缀r
  • 确认文件夹权限为可读写
  • 搜索相关解决方案

核心原因分析

这种差异大多是因为Spyder和Excel的Python运行环境的工作目录不同,或者Excel的安全机制限制了脚本对文件的访问:

  • Spyder运行时的工作目录通常是你脚本所在的文件夹,或者你手动设置的目录,所以硬编码的绝对路径能正常解析;
  • 但Excel内的Python脚本默认工作目录可能是Excel的安装目录,或者系统默认的文档目录,不是你文件所在的文件夹,导致硬编码的路径失效;
  • 另外Excel的受信任位置设置也可能阻止脚本访问非信任目录下的文件。

针对性解决办法

1. 动态获取当前Excel文件路径(最推荐)

既然你要加载的就是当前正在运行脚本的Excel文件,完全不需要硬编码路径,直接通过Excel的API获取当前文件的绝对路径:

import win32com.client
import matplotlib.pyplot as plt
import openpyxl
from openpyxl import load_workbook

# 获取当前活动的Excel工作簿路径
excel_app = win32com.client.GetActiveObject("Excel.Application")
current_wb_path = excel_app.ActiveWorkbook.FullName

# 加载工作簿(注意xlsm文件需要加keep_vba=True参数)
wb = load_workbook(current_wb_path, keep_vba=True)

# 后续读取命名区域、生成表格的代码保持不变
named_range = wb.defined_names['DT_1']
cells = named_range.destinations

sheet_name, cell_range = next(cells)
sheet = wb[sheet_name]
data = [[cell.value for cell in row] for row in sheet[cell_range]]

fig, ax = plt.subplots(figsize=(3,3), dpi=400)
ax.axis('off')

table = ax.table(cellText=data, loc='center', cellLoc='center')
table.auto_set_font_size(False)
table.set_fontsize(9)
table.scale(1, 1.2)

for cell in table._cells:
    table._cells[cell].set_edgecolor('black')
    table._cells[cell].set_linewidth(0.5)

plt.show()

这样不管你的Excel文件移到哪个位置,脚本都能正确加载,彻底解决路径硬编码的问题。

2. 检查并调整Excel的工作目录

先打印出Excel内Python脚本的当前工作目录,确认是否和你文件所在目录一致:

import os
print(os.getcwd())

如果输出的目录不是你的文件所在的C:/Users/barry/Desktop/WS Generators/,可以手动切换工作目录:

import os
os.chdir("C:/Users/barry/Desktop/WS Generators/")
# 之后再加载工作簿
wb = load_workbook("Stats WS Generator 2024.xlsm", keep_vba=True)

3. 添加文件夹到Excel受信任位置

Excel的安全机制可能会阻止脚本访问非信任目录的文件,你可以把文件所在文件夹添加到受信任位置:

  1. 打开Excel,点击「文件」→「选项」→「信任中心」→「信任中心设置」;
  2. 选择「受信任位置」→「添加新位置」;
  3. 选中你的WS Generators文件夹,勾选「同时信任此位置的子文件夹」,点击确定。

4. 以管理员身份运行Excel

有时候Windows的UAC权限会限制Excel访问某些目录,右键Excel图标,选择「以管理员身份运行」,再打开文件运行脚本试试。

备注:内容来源于stack exchange,提问作者Mark Barry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:04:34