如何使用 Java 中的参数运行 VBS 函数并将结果分配给变量

Posted

技术标签:

【中文标题】如何使用 Java 中的参数运行 VBS 函数并将结果分配给变量【英文标题】:How to run VBS function with parameters from Java and assign result to variable 【发布时间】:2017-07-02 20:24:56 【问题描述】:

我有这个 excel 宏:

Function Calculate_Something(StartDate As Date, EndDate As Date) As Double

//some math is here, not important

Calculate_Something = Result
End Function

我想将我的日期传递给这个宏,在我的 Java 程序中执行它,最后得到返回值并将它分配给我在 Java 中的值。

我已经用这个函数创建了 VBS 脚本,并尝试在 Java 中像这样执行它:

 String[] parms = "wscript", "calc.vbs", "2017-02-06 09:38:36", "2017-02-06 12:47:41";
 Runtime.getRuntime().exec(parms);

但它没有用。你知道我该怎么做吗?

【问题讨论】:

【参考方案1】:

您将希望使用cscript.exe 而不是wscript.exe,它们都是同一个主机,但一个是为 GUI 设计的,而另一个是为命令行设计的。

修改 VBScript 函数以将Result 输出到屏幕(执行的命令输出流),然后使用从调用Runtime.getRuntime().exec(parms); 派生的Process 对象检索它。

Process 对象有一个名为 getInputStream() 的方法,它应该允许您访问和读取脚本输出返回的值。

try 
    String[] parms = "cscript", "calc.vbs", "2017-02-06 09:38:36", "2017-02-06 12:47:41";
    Process p = Runtime.getRuntime().exec(parms);

    // Get Input Stream from the Process
    BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream()));

    // Do something with stream, read etc.
    String line;
    while ((line = is.readLine()) != null)
        System.out.println(line);

 catch (Exception ex) 
    ex.printStackTrace();


有用的链接

vbscript output to console What is InputStream & Output Stream? Why do we use them and when do we use each of them? Understanding getInputStream and getOutputStream

【讨论】:

以上是关于如何使用 Java 中的参数运行 VBS 函数并将结果分配给变量的主要内容,如果未能解决你的问题,请参考以下文章

如何重命名文件并覆盖 VBS 中的现有文件?

vb.net2005中如何调用外部vbs文件

如何从 vbs 以管理员身份运行 vbs?

Uipath 调用Vbs(含传递参数和返回值)

java中调用.vbs文件,vbs文件并没有反应

vbs怎么产生0-10的随机数呀?