我需要把java函数的输出字符串放到我的vba项目中。作为一个快速的例子,我试图安装java版本的输出,但在实际应用程序中,它将是其他私有函数。
第一次尝试:
' Needs a reference to Windows Script Host Object Model
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub get_java_output()
Dim cmd_windows As New WshShell
Dim execution_cmd As WshExec
Dim command_str As String
command_str = "java -version"
Set execution_cmd = cmd_windows.exec("cmd.exe /c " & command_str)
Do While execution_cmd.Status = WshRunning
Sleep 20
Loop
final_string = execution_cmd.StdOut.ReadAll
Debug.Print final_string
End Sub
第二次尝试:
Sub get_java_output_2()
Dim windows_shell As Object
Set windows_shell = CreateObject("WScript.Shell")
command_str = "java -version"
shell_output = windows_shell.Run("cmd /c " & command_str & " > c:\temp\output.txt", 0, False)
Set fso = CreateObject("Scripting.FileSystemObject")
Set File = fso.OpenTextFile("c:\temp\output.txt", 1)
final_string = File.ReadAll
File.Close
Debug.Print final_string
End Sub
他们都不为我工作。
我想避免使用临时文件,就像我第二次尝试的例子一样。在最后的用法中,我将调用这个函数数十万次,我不希望创建那么多的文件或编辑文件那么多次。。。
1条答案
按热度按时间qzwqbdag1#
我已经找到了两种尝试的解决方案,基本上是相同的问题:命令shell上显示的java函数的输出被视为错误,因此它不是输出。疑点在这里解决了
在将java输出发送到文件的情况下,可以使用
2>
而不仅仅是>
就像这里说的。不管怎样,有很多不同的变体取决于你需要什么,正如在这个链接中所报道的。此方法的一个小问题是,创建输出文件需要一段时间,因此Run
命令必须确定为True
代码如下:在直接将java输出转换为变量的情况下,可以使用
StdErr
而不是StdOut
. 我看到了这个链接。这个WshExec
对象有三个主要元素:StdErr
,StdIn
以及StdOut
. 如果java输出字符串被视为错误,那么它应该在StdErr
相反。代码如下: