xlwings VBA RunPython 无法生成日志文件

xlwings VBA RunPython is failing to generate logfile

提问人:Hibbert 提问时间:11/15/2023 更新时间:11/15/2023 访问量:28

问:

我正在尝试获取一个 VBA 宏来调用 python 程序(使用 xlwings),该程序将在运行时创建一个日志文件,以及其他目标。

我有以下 python 函数(它创建一个基本的日志文件并向其写入 1 行):

def VBA_log_test(log_value):
    import logging
    logging.basicConfig(filename='Prime_Portal.log', encoding='utf-8', level=logging.DEBUG, filemode='w')
    
    # Print out input array for debugging purposes
    logging.debug('Input Array:\n' + str(log_value))

这是我正在运行的 VBA 宏,但它不会生成(或更新)日志文件。

Sub Test_Python_Logfile()
    Debug.Print "Macro Test Started"
    
    Dim python_input As String
    ' python_input = "import testing2; testing2.VBA_log_test('VBA TEST')"
    python_input = "import testing2" & vbNewLine & "testing2.VBA_log_test('VBA TEST')"
    
    Debug.Print "Python Command = " & python_input
    RunPython python_input
    
    Debug.Print "Macro Test Completed"
End Sub

附加信息:

  • 这两个文件位于同一目录中
  • python 代码在直接调用时成功工作
if __name__ == '__main__':
    VBA_log_test('python test 2')
    # ^^^ This works just fine. 
  • 从另一个 python 文件调用时,该代码也可以正常工作。只有当使用 xlwings 和“RunPython”从 VBA 调用时,它才无法创建日志文件
python excel vba xlwings

评论

2赞 Tim Williams 11/15/2023
您的脚本只有日志文件名 - 您是否尝试过提供完整路径?您的 python 的行为可能会有所不同,具体取决于它的运行方式(直接与 xlwings)——当前目录可能会有所不同。
1赞 moken 11/15/2023
同意@Tim威廉姆斯的观点。我试过了,它奏效了。否则,我更改为日志文件已放入 Python 环境目录。并将VBA代码中的“python_input”更改为因为我的目录命名不同。 取自示例。从 Excel 运行宏在“C:\temp”中生成“Prime_Portal.log”,其中包含文本logging.basicConfig(filename='Prime_Portal.log', encoding...logging.basicConfig(filename='C:/Temp/Prime_Portal.log', encoding...python_input = "import " & mymodule & ";" & mymodule & ".VBA_log_test('VBA TEST')"mymoduleDEBUG:root:Input Array: VBA TEST
0赞 Hibbert 11/16/2023
谢谢你们。使用完整路径使其正常工作。

答: 暂无答案