有没有办法在Excel-VBA中调用python代码?

我有一个包含macros的Excel文件(Main.xlsm)。 我有一个python文件(python.py)来生成一个辅助excel文件(sub.xlsx),我将进一步调用Main.xlsm文件的macros。 这个由运行python.py生成的sub.xlsx文件保存在同一个工作目录中。

现在我想让这个python.py在运行Main.xlsmmacros的时候被执行,然后使用这个xlsx文件。 我基本上想要减less外部执行python.py的步骤。 有这个命令吗? 我是VBA新手。

最简单的方法是使用Shell命令运行python解释器

 Shell ("python.exe " & yourScript & " " & arguments) 

就在这里。 我最喜欢的方法是通过xlwings( https://www.xlwings.org/ ),但也有其他几个选项。 XlWings是伟大的,因为它是免费的,开源的,易于使用,有很好的文档。 虽然有一些function限制,所以你必须检查它是否符合你的需求。

有多种方法可以用VBA运行python脚本,具体取决于是否需要等待执行结束并知道它是否没有错误。

使用Shell ,与控制台asynchronous:

 Public Sub RunPython(file As String, ParamArray args()) Shell "python.exe """ & file & """ " & Join(args, " ") End Sub 

使用Shell ,无控制台同步:

 Public Function RunPython(file As String, ParamArray args()) Shell "pythonw.exe """ & file & """ " & Join(args, " ") End Function 

使用WScript.Shell ,无需控制台和退出代码同步:

 Public Function RunPython(file As String, ParamArray args()) As Long Dim obj As Object Set obj = CreateObject("WScript.Shell") RunPython = obj.Run("pythonw.exe """ & file & """ " & Join(args, " "), 0, True) End Function