使用xlwings打开工作簿报错求助:路径优化后代码运行异常
解决xlwings相对路径打开工作簿报错的问题
首先,你的思路完全没问题——用相对路径替代硬编码绝对路径确实能提升脚本的可移植性,但问题出在os.getcwd()的行为上:它返回的是你运行脚本时的当前工作目录,而不是脚本文件本身所在的目录。举个例子:如果你的脚本在C:\Projects\Tool里,但你在C:\Users\YourName目录下通过命令行运行python C:\Projects\Tool\script.py,那os.getcwd()返回的是C:\Users\YourName,自然找不到目标Excel文件。
下面是几种可靠的解决方法,按推荐程度排序:
方法1:获取脚本所在目录(最推荐)
用__file__变量获取脚本的绝对路径,再提取目录部分,这样不管你从哪里运行脚本,都能精准定位到和脚本同目录的Excel文件:
import xlwings as xw import os # 获取脚本文件所在的目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 安全拼接路径(自动处理反斜杠/斜杠的兼容问题) std_path_str = os.path.join(script_dir, 'EG_ReviewSTD_HN.xlsx') std_wb = xw.Book(std_path_str)
如果你用Python 3.4+,也可以用更简洁直观的pathlib(面向对象的路径操作,可读性更强):
import xlwings as xw from pathlib import Path script_dir = Path(__file__).parent.resolve() std_path = script_dir / 'EG_ReviewSTD_HN.xlsx' std_wb = xw.Book(std_path)
方法2:确保运行脚本时的工作目录是脚本所在目录
如果你不想修改代码,也可以在运行脚本前手动切换到脚本所在目录:
- Windows命令行:先执行
cd C:\Path\To\Your\Script\Folder,再运行python script.py - IDE(比如VS Code、PyCharm):可以在运行配置里设置「工作目录」为脚本所在的文件夹
不过这种方法灵活性较差,一旦换了运行方式就容易出问题,不如方法1可靠。
调试小技巧
如果还是不确定路径哪里出错,可以先打印出最终生成的路径,直观对比排查:
print(std_path_str) # 使用pathlib时则打印print(std_path)
另外还要确认两个细节:
- Excel文件确实和脚本在同一个文件夹里(注意文件名大小写,Windows虽然不区分,但保持一致能避免潜在问题)
- 脚本有访问该文件的权限(不过你用绝对路径能打开,这个问题概率极低)
内容的提问来源于stack exchange,提问作者Đức Trường Đặng
相关产品推荐
相关产品推荐

