使用xlwings通过VBA调用RunPython无法生成日志文件
问题解决:xlwings通过VBA调用Python时日志文件不生成
问题原因
通过xlwings的RunPython调用Python代码时,Python的工作目录并非Excel文件所在目录,而是Excel程序的默认启动目录(比如C:\Users\<你的用户名>\Documents)。你用相对路径'Prime_Portal.log'创建日志,文件实际生成在了这个默认目录里,而非你预期的Excel同目录,所以看起来像是没有生成。
而直接运行Python脚本或从其他Python文件调用时,工作目录是脚本所在目录,因此日志能正常生成在预期位置。
解决方案
方案1:在Python中指定绝对路径(推荐)
修改Python函数,通过os模块获取脚本所在目录,拼接日志文件的绝对路径,确保日志生成在Excel与Python脚本的共同目录:
def VBA_log_test(log_value): import logging import os # 获取当前Python脚本的绝对路径 script_path = os.path.abspath(__file__) # 提取脚本所在目录 script_dir = os.path.dirname(script_path) # 拼接日志文件的完整路径 log_file_path = os.path.join(script_dir, 'Prime_Portal.log') logging.basicConfig(filename=log_file_path, encoding='utf-8', level=logging.DEBUG, filemode='w') logging.debug('Input Array:\n' + str(log_value))
方案2:在VBA中切换工作目录
在调用RunPython前,通过ChDir将Excel的工作目录切换到当前文件所在目录,让Python继承这个路径:
Sub Test_Python_Logfile() Debug.Print "Macro Test Started" Dim python_input As String ' 切换到当前Excel文件所在目录 ChDir ThisWorkbook.Path python_input = "import testing2; testing2.VBA_log_test('VBA TEST')" Debug.Print "Python Command = " & python_input RunPython python_input Debug.Print "Macro Test Completed" End Sub
验证
如果你之前的日志已经生成,可以去Excel默认启动目录(比如C:\Users\<你的用户名>\Documents)查找Prime_Portal.log,里面应该包含VBA TEST的日志内容。
内容的提问来源于stack exchange,提问作者Hibbert
相关产品推荐
相关产品推荐

