是的,有可能。
实际上有很多方法,希望您喜欢我的示例。
为了证明这一点,我创建了一个程序,其中一些文本作为参数发送,并且程序以更改后的版本作为响应。我做了一个可运行的罐子。第一个示例从args中读取参数,而从标准输入中读取其他参数。
文件 Hello.java 和 H1.jar :
public class Hello { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Hello"); if (args.length > 0) sb.append(' ').append(args[0]); System.out.println(sb.append('.').toString()); }}
文件 Hello2.java 和 H2.jar :
import java.util.Scanner;public class Hello2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder("Hello"); sb.append(' ').append(sc.nextLine()); System.out.println(sb.append('.').toString()); }}
您可以将它们保存在一个jar中,但是随后需要创建并使用清单(这有点过分杀伤)。
现在,在Excel中,我添加一个模块和对Windows脚本宿主对象的引用。如果您不喜欢
sleep,则可以将其替换为
DoEvents:
'add a reference to Windows script Host Object Model'for example : Tools-ReferencesOption ExplicitPrivate Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Sub RunSleep( _ exec As WshExec, _ Optional timeSegment As Long = 20 _) Do While exec.Status = WshRunning Sleep timeSegment LoopEnd SubPrivate Function RunProgram( _ program As String, _ Optional command As String = "" _) As WshExec Dim wsh As New WshShell Dim exec As WshExec Set exec = wsh.exec(program) Call exec.StdIn.WriteLine(command) Call RunSleep(exec) Set RunProgram = execEnd Function
为了测试它,我将文件保存到
c:驱动器并使用了代码:
Public Sub Run() Dim program As WshExec Set program = RunProgram("java -jar ""C:\H1.jar"" Margus") Debug.Print "STDOUT: " & program.StdOut.ReadAll Set program = RunProgram("java -jar ""C:\H2.jar", "Margus") Debug.Print "STDOUT: " & program.StdOut.ReadAllEnd Sub
就我而言,我收到了以下回复:
标准输出:你好玛格斯。
标准输出:你好玛格斯。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)