无法将python脚本返回的数组分配给VBA中的变量

时间:2015-06-11 16:21:38

标签: python excel-vba vba excel

当我在bash上执行这个python脚本时,这就是我收到的,这一切都很好。

ans=$(python getIndividualCurrentPrice.py 1113 0001 0293 0004 1972 0005 0003 0941)

echo $ans [u'68.00', u'110.90', u'18.60', u'51.80', u'25.50', u'73.15', u'15.88', u'110.10']

然而,当我尝试通过 VBA执行这个python脚本时,这就是我在VBA中所做的:

RetVal = Shell("C:\Python27\python.exe C:\Python27\getIndividualCurrentPrice.py 1113 0001 0293 0004 1972 0005 0003 0941" )

MsgBox(RetVal)

10980

更新 我设法在VBA中执行python脚本而没有任何错误,但是返回的值是 10980一个随机数,这没有意义。有趣的是,我可以看到启动了一个python.exe,并在那里显示了正确的结果。但返回的结果从未存储在VBA变量RetVal中。 **这里出了什么问题? **

旁注:我尝试了MsgBox(Shell("echo $HOME")),但我得到了一个值26988,根本没有意义。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我认为Shell()返回类似进程ID的东西 - 而不是标准输出。

我不确定如何在纯VBA中执行此操作。如果您使用的是Windows计算机,则可以使用VBScript的Windows脚本宿主。只需确保在VBA项目中包含对Windows脚本宿主对象模型的引用(如果您还没有完成此类操作,请在VBE中的工具菜单项下)。以下代码说明了如何将标准输出的输出捕获到字符串变量。我写了一个简单的.py脚本文件来计算阶乘。然后:

Sub Test()
    Dim ws As New WshShell
    Dim exec As WshExec
    Dim output As String
    Set exec = ws.exec("python C:/programs/factorial.py 10")
    output = exec.StdOut.ReadAll
    MsgBox output 'prints 3628800
End Sub