Python:xlwings 和子目录

问题描述 投票:0回答:1

我有2个功能。我想检查子目录中是否存在文件。

def XlCall():
    wb = xw.Book.caller()
    from pathlib import Path
    entries = Path('./History/data.csv')
    wb.sheets('TA').range('A1').value = entries.exists()

和..

def main():
    wb = xw.Book("Test.xlsm")
    from pathlib import Path
    entries = Path('./History/data.csv')
    wb.sheets('TA').range('A1').value = entries.exists()

第一个函数是从 Excel (xlwings) 调用的,另一个函数是从 python 调用的。

当我从 python 运行时,它可以工作(entires.exists()=True),但是当从 Excel 调用时,它将为 False。

为什么?我认为这是关于 PYTHONPATH 但只是找不到解决方法。

OneDrive 上的文件(如果重要的话)。

我也尝试使用 os.path & contains() 但结果相同。

python xlwings pythonpath
1个回答
0
投票

您正在寻找相对路径上的文件,该文件在 Excel 和单独运行的 python 脚本中可能会以不同的方式解析。

默认情况下,Excel 中的当前工作目录是一个路径,您可以在选项中找到该路径:文件/选项/保存/默认本地文件位置(通常是C:\Users\me_as_user\Documents)。对于脚本,初始工作文件夹是启动该脚本的文件夹。当您从 Excel 运行该函数时,从相关路径派生的完整路径可能类似于 C:\Users\you\Documents\History\...。虽然从 OneDrire 执行的脚本可能返回类似 C:\Users\you\OneDrive\History\...

IMO 解决问题的可靠方法是使用

os.environ["OneDrive"]
而不是
"./"
作为起点:

from os import environ
from pathlib import Path

documents = Path(environ["OneDrive"])
entries = documents / 'History/data.csv'
...
© www.soinside.com 2019 - 2024. All rights reserved.