Windows脚本宿主 - 无法从控制台获取StdOut

时间:2018-03-17 04:47:41

标签: java excel vba stdout wsh

我需要对VBA,Excel和WSH有特定疑问。 我有一个我想用来运行jar的excel。使用System.out.println,此jar需要4秒钟才能返回anser。

我在excel中用VBA创建了一个脚本来运行这个jar并通过StdOut.ReadAll收集结果,但问题是我每次运行它都没有得到任何结果......我正在执行java并且它返回1000,当我执行vba时似乎没有任何反应。

这是我的VBA代码:

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Sub Test()
Dim prog As Object
Dim Exec As Object
Dim A As String
Set prog = CreateObject("WScript.Shell")
Set Exec = prog.Exec("java -jar JExcel.jar " & Range("a2").Value) <- Im passing an argument here
    While Exec.Status = WshRunning
        Range("b2") = "Running"
        Sleep (100)
    Wend
Range("b2").Value = Exec.StdOut.ReadAll
End Sub

我在这里和其他地方阅读了很多资料,但没有幸运。

有谁知道可能是什么问题?

谢谢

1 个答案:

答案 0 :(得分:0)

假设Java和.jar文件都不在Excel的默认保存路径中(您可以使用VBA属性Application.DefaultFilePath进行检查),则需要指定一两个路径。

我实际上不熟悉Java,但如果你的PATH evnironment变量(VBA:Environ("Path"))包含Java可执行文件的路径,那么该部分应该没问题,但我想你了仍然必须指定.jar的路径。

此外,还有一种更简单的方式来调用Shell

Dim RetVal
RetVal = Shell("C:\WINDOWS\CALC.EXE", 1)    ' Run Calculator.

Shell函数

运行可执行程序,如果成功则返回表示程序Variant (Double)的{​​{1}},否则返回零。

<强>语法

<强> Task ID

Shell函数语法具有以下命名参数:

  • 路径名必需; Shell( pathname [, windowstyle ] ))要执行的程序的名称以及任何必需的参数或命令行开关; 可能包含目录或文件夹和驱动器

  • windowstyle 可选; Variant (String))对应于运行程序的窗口样式。如果省略Variant (Integer),程序将以焦点最小化启动。

windowstyle命名参数具有以下值:

windowstyle

备注

如果 Constant Value Description vbHide 0 Window is hidden and focus is passed to the hidden window. vbNormalFocus 1 Window has focus and is restored to its original size and position. vbMinimizedFocus 2 Window is displayed as an icon with focus. vbMaximizedFocus 3 Window is maximized with focus. vbNormalNoFocus 4 Window is restored to its most recent size and position. The currently active window remains active. vbMinimizedNoFocus 6 Window is displayed as an icon. The currently active window remains active. 函数成功执行了指定文件,它将返回已启动程序的任务ID 任务ID 是标识正在运行的程序的唯一编号。如果Shell函数无法启动指定的程序,则会发生错误。

注意

默认情况下,Shell函数异步运行其他程序。这意味着在执行Shell函数之后的语句之前,以Shell开头的程序可能无法完成执行。

<子>(Source