从VBA获取Java字符串的输出
我需要将java函数的输出字符串输入到我的VBA项目中。作为一个快速的例子,我正在尝试安装java版本的输出,但在实际应用程序中,它将是其他私有函数 第一次尝试:从VBA获取Java字符串的输出,java,vba,Java,Vba,我需要将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
' 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
他们都不为我工作
我希望避免像第二次尝试示例中那样使用临时文件。在最后的使用中,我将调用此函数数十万次,我不希望创建那么多文件或多次编辑该文件…我已经找到了两次尝试的解决方案,基本上是相同的问题:命令shell上显示的java函数的输出被视为错误,因此,它不是一个输出 在将java输出发送到文件的情况下,可以使用
2>
来解决,而不是像上面所说的那样仅使用
。无论如何,根据您的需要,有许多不同的变体,如中所述。此方法的一个小问题是创建输出文件需要一段时间,因此Run
命令的最终变量必须设置为True
代码如下:
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 & " 2> c:\temp\output.txt", 0, True)
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
' 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(command_str)
Do While execution_cmd.Status = WshRunning
Sleep 20
Loop
final_string = execution_cmd.StdErr.ReadAll
Debug.Print final_string
End Sub
在将java输出直接带到变量的情况下,使用StdErr
而不是StdOut
来解决该问题。
我得到了照明读数。WshExec
对象有三个主要元素:StdErr
、StdIn
和StdOut
。如果java输出字符串被视为错误,那么它应该在StdErr
中
代码如下:
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 & " 2> c:\temp\output.txt", 0, True)
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
' 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(command_str)
Do While execution_cmd.Status = WshRunning
Sleep 20
Loop
final_string = execution_cmd.StdErr.ReadAll
Debug.Print final_string
End Sub
我已经找到了两种尝试的解决方案,基本上是相同的问题:命令shell上显示的java函数的输出被视为错误,因此它不是输出 在将java输出发送到文件的情况下,可以使用
2>
来解决,而不是像上面所说的那样仅使用
。无论如何,根据您的需要,有许多不同的变体,如中所述。此方法的一个小问题是创建输出文件需要一段时间,因此Run
命令的最终变量必须设置为True
代码如下:
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 & " 2> c:\temp\output.txt", 0, True)
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
' 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(command_str)
Do While execution_cmd.Status = WshRunning
Sleep 20
Loop
final_string = execution_cmd.StdErr.ReadAll
Debug.Print final_string
End Sub
在将java输出直接带到变量的情况下,使用StdErr
而不是StdOut
来解决该问题。
我得到了照明读数。WshExec
对象有三个主要元素:StdErr
、StdIn
和StdOut
。如果java输出字符串被视为错误,那么它应该在StdErr
中
代码如下:
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 & " 2> c:\temp\output.txt", 0, True)
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
' 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(command_str)
Do While execution_cmd.Status = WshRunning
Sleep 20
Loop
final_string = execution_cmd.StdErr.ReadAll
Debug.Print final_string
End Sub
这实际上与Java本身无关。您正试图捕获通过shell命令调用的进程的输出。也许这里的一个答案可以帮助您:这实际上与Java本身无关。您正试图捕获通过shell命令调用的进程的输出。也许这里的一个答案可以帮助您: