如何在excel vba上调用python脚本?

Ege*_*lem 25 python shell vba py2exe excel-vba

试图在Vba上调用python脚本,我是一个新手.我尝试使用py2exe将主脚本转换为exe,然后从VBA(shell)调用它,但主脚本调用其他脚本,因此它变得复杂,我搞砸了(我的exe不起作用).此外,主脚本是一个大文件,我不想修改它.

Bottomline,有没有办法从excel vba调用主脚本,而不将脚本转换为exe文件.

到目前为止,我尝试过:

RetVal = Shell("C:\python27\python.exe " & "import " & "C:\\" & "MainScriptFile")
Run Code Online (Sandbox Code Playgroud)

它启动python.exe但没有做任何其他事情.然后我尝试了:

RetVal = Shell("C:\Windows\System32\cmd.exe " & "python " & "C:\\Python27\\hello.py")
Run Code Online (Sandbox Code Playgroud)

它启动命令提示符,但甚至不启动python.

PS我在论坛上检查了所有相关问题,他们没有解决我的问题.

小智 26

试试这个:

RetVal = Shell("<full path to python.exe> " & "<full path to your python script>")
Run Code Online (Sandbox Code Playgroud)

或者如果python脚本与工作簿位于同一文件夹中,那么您可以尝试:

RetVal = Shell("<full path to python.exe> " & ActiveWorkBook.Path & "\<python script name>")
Run Code Online (Sandbox Code Playgroud)

其中的所有细节<>都将给出.<> - 表示可更改的字段

我想这应该有效.但话又说回来,如果你的脚本要调用不同文件夹中的其他文件,除非你的脚本正确处理它,否则它可能会导致错误.希望能帮助到你.

  • 对不起,我不知道我以前做错了什么.它现在有效.非常感谢!我用过:RetVal = Shell("C:\ python27\python.exe C:\ Python27\CallOptimizer.py") (3认同)

ASH*_*ASH 13

我刚看到这个旧帖子。上面列出的任何内容都没有对我有用。我测试了下面的脚本,它在我的系统上运行良好。在这里分享,为了其他跟随我来到这里的人的利益。

Sub RunPython()

Dim objShell As Object
Dim PythonExe, PythonScript As String

    Set objShell = VBA.CreateObject("Wscript.Shell")

    PythonExe = """C:\your_path\Python\Python38\python.exe"""
    PythonScript = "C:\your_path\from_vba.py"

    objShell.Run PythonExe & PythonScript

End Sub
Run Code Online (Sandbox Code Playgroud)


Bra*_*rad 5

有几种方法可以解决这个问题

Pyinx - 一个非常轻量级的工具,允许您通过excel进程空间调用Python http://code.google.com/p/pyinex/

几年前我曾经使用过这个(当它被积极开发时),它运作得很好

如果你不介意付钱,这看起来很不错

https://datanitro.com/product.html

我从来没用过它


虽然如果你已经在用Python编写,也许你可以完全放弃excel并在纯python中做所有事情?维护一个代码库(python)而不是2(python +你所拥有的任何excel叠加层)要容易得多.

如果你真的必须将数据输出到excel中,那么在Python中甚至还有一些非常好的工具.如果这可能更好,请告诉我,我会得到链接.