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

如何在Excel调用的Python脚本中自动获取指定文件的路径?

解决xlwings从Excel运行Python时的文件路径自动配置问题

核心问题原因

从Excel通过xlwings调用Python脚本时,os.getcwd()返回的是Python解释器的启动目录(也就是你遇到的C:\ProgramData\Anaconda3\),而非脚本或Excel文件的所在目录,导致路径拼接失效。以下是几种可靠的解决方法:


方法1:基于Python脚本自身路径定位(最推荐)

利用Python内置的__file__变量获取脚本的绝对路径,以此为基准拼接目标文件路径,不受运行目录影响:

import os

# 获取当前Python脚本的绝对路径
script_full_path = os.path.abspath(__file__)
# 提取脚本所在的文件夹路径
script_dir = os.path.dirname(script_full_path)
# 拼接目标文件的完整路径(确保目标文件和脚本在同一文件夹)
target_file_path = os.path.join(script_dir, "myfile")

只要同事将目标文件和Python脚本放在同一目录下,无论从哪里启动Excel调用脚本,都能正确找到文件。

方法2:基于Excel工作簿路径定位

如果同事会将Excel文件、Python脚本、目标文件放在同一目录下,可以用xlwings直接获取当前工作簿的路径:

import xlwings as xw
import os

# 获取当前触发脚本的Excel工作簿对象
wb = xw.Book.caller()
# 提取工作簿所在的文件夹路径
wb_dir = os.path.dirname(wb.fullname)
# 拼接目标文件路径
target_file_path = os.path.join(wb_dir, "myfile")

这种方法更贴合Excel用户的使用习惯,适合文件组整体迁移的场景。

方法3:通过环境变量约定路径(备选)

如果目标文件的存放位置不固定,可以和同事约定一个环境变量,脚本读取该变量来定位路径:

import os

# 读取约定的环境变量
target_dir = os.getenv("MY_TARGET_FILE_DIR")
if target_dir:
    target_file_path = os.path.join(target_dir, "myfile")
else:
    # 环境变量未设置时抛出提示
    raise ValueError("请先设置环境变量MY_TARGET_FILE_DIR,指向目标文件所在的文件夹")

需要同事提前在系统中配置好对应的环境变量,适合文件位置固定但不在脚本/Excel目录的场景。

内容的提问来源于stack exchange,提问作者Adel Moustafa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:40:24