我有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() 但结果相同。
您正在寻找相对路径上的文件,该文件在 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'
...