从VBA调用Python(Winwrap)

从VBA调用Python(Winwrap),python,vba,machine-learning,winwrap,Python,Vba,Machine Learning,Winwrap,我使用的软件有一个基于VBA/Winwrap Basic的编程接口。我想使用Python中的一些机器学习库,但我不确定如何高效地构建它 该软件是一个动态仿真程序。每隔几步,我就会用Pyhton库的新数据更新(训练)一个人工神经网络(ANN)。我可以看到可以调用脚本(如中所示)。因为我必须每隔几次调用脚本,所以我不确定如何处理ANN对象。实现这一点的最佳方法是什么?如果我理解正确,您希望调用Python脚本并传递参数,然后处理返回数据对象? 如果您使用Windows并具有VBA脚本环境,则可能可以

我使用的软件有一个基于VBA/Winwrap Basic的编程接口。我想使用Python中的一些机器学习库,但我不确定如何高效地构建它


该软件是一个动态仿真程序。每隔几步,我就会用Pyhton库的新数据更新(训练)一个人工神经网络(ANN)。我可以看到可以调用脚本(如中所示)。因为我必须每隔几次调用脚本,所以我不确定如何处理ANN对象。实现这一点的最佳方法是什么?

如果我理解正确,您希望调用Python脚本并传递参数,然后处理返回数据对象? 如果您使用Windows并具有VBA脚本环境,则可能可以使用WSH(Windows脚本主机)对象来运行脚本。首先声明对象

Dim wsh As New IWshRuntimeLibrary.WshShell  'early binding

Dim wsh As Object
Set wsh = CreateObject("Wscript.Shell") ' late binding
并对对象使用Run()方法,将对象和参数作为字符串传递。在本例中,我调用powershell并将scriptfile(run.ps1)作为参数传递。我只调用该方法,但不从脚本中获取返回对象

res = wsh.Run("powershell path\run.ps1", WindowStyle:=False, WaitOnReturn:=True)
If res = 0 Then
    Call MsgBox("script ran successfully")
Else
    Call MsgBox("script ran unsuccessfully")
End If
另一方面,在本例中,我使用Exec方法以json的形式获取返回数据

res = wsh.Exec("powershell path\run.ps1").StdOut.ReadAll()

Debug.Print res ' return data:

returnObject: 
{
    title: 'theTitle', 
    value: 'the value',
    status: 'status'
}
run.ps1基本上返回一个字符串:

return "returnObject: 
{
    title: 'theTitle', 
    value: 'the value',
    status: 'status'
}"
Edit:要调用python脚本文件,请在powershell中使用
python
py

res = wsh.Exec("python path\pythonfile.py").StdOut.ReadAll()

使用“Run”方法可以很好地工作。但当我尝试“Exec”方法时,它返回一个错误“不是有效的Win32应用程序”。在第二个示例中,如何声明“res”?我尝试了“Dim res As String”和“Dim res As Object”。顺便说一句。powershell如何知道这是Python脚本?@StefanOverFlow我的示例使用的是ps1(powershell)脚本文件,而不是Python。如果要运行python脚本,只需更改字符串命令和参数,例如:
res=wsh.Exec(“py path\run.py”).StdOut.ReadAll()