通过excelvba运行python脚本

mfuanj7w  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(547)

我无法从excel vba运行python脚本。这是vba代码:

  1. Sub RunPython()
  2. Dim objShell As Object
  3. Dim PythonExe, PythonScript As String
  4. Set objShell = VBA.CreateObject("Wscript.Shell")
  5. PythonExe = """C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe"""
  6. PythonScript = """C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"""
  7. objShell.Run PythonExe & PythonScript
  8. End Sub

python代码如下所示。

  1. print("hello")
  2. input("hello, press enter")

当我运行vba时,python executer会打开,但会立即关闭,而不会实际执行脚本。换句话说,两者都不是 "hello" 也没有 "hello, press enter" 出现在python executer窗口上,该窗口突然关闭。
我确信python.exe和python脚本的路径是正确的。我两个都试过了 """""" 在这两种情况下,它都不起作用。很明显(非常简单!)如果我直接从python执行器运行python脚本,它就会工作。

eufgjt7s

eufgjt7s1#

你可能需要在两者之间留出空间 PythonExe & " " & PythonScript . 因此,您运行的命令是 "C:\…\python3.exe" "C:\…\BlackBoxAbsorbers.py" 在程序路径和python脚本之间留有空格。
还要注意 Dim PythonExe, PythonScript As String 只声明 PythonScript As String 但是 PythonExe As Variant . 在vba中,需要为每个变量指定一种类型: Dim PythonExe As String, PythonScript As String 或者是 Variant 默认情况下!
进一步的 objShell.Run PythonExe & PythonScript 无法正确调试。我建议将命令放入变量中,以便您能够在即时窗口中打印它以进行调试:

  1. Dim Command As String
  2. Command = PythonExe & PythonScript
  3. Debug.Print Command
  4. objShell.Run Command

如果执行此操作,您将看到命令的输出为:

  1. "C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe""C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"

两个字符串之间没有空格,实际上应该是:

  1. "C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe" "C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"

因此,我建议:

  1. Public Sub RunPython()
  2. Dim objShell As Object
  3. Set objShell = VBA.CreateObject("Wscript.Shell")
  4. Dim PythonExe As String
  5. PythonExe = """C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe"""
  6. Dim PythonScript As String
  7. PythonScript = """C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"""
  8. Dim Command As String
  9. Command = PythonExe & " " & PythonScript
  10. objShell.Run Command
  11. End Sub
展开查看全部
7cwmlq89

7cwmlq892#

解决了的!!我不明白为什么,但是拆分objshell.run pythonexe和objshell.run pythonscript效果很好!就像这样:

  1. Public Sub RunPython()
  2. Dim objShell As Object
  3. Set objShell = VBA.CreateObject("Wscript.Shell")
  4. Dim PythonExe As String
  5. PythonExe = """C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe"""
  6. Dim PythonScript As String
  7. PythonScript = """C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"""
  8. objShell.Run PythonExe
  9. objShell.Run PythonScript
  10. End Sub

无论如何谢谢@pᴇʜ,我认为你的回答是肯定的,因为你一直都很好!!

展开查看全部

相关问题