如何在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
相关产品推荐
相关产品推荐

