Microsoft Excelmacros来运行Java程序

我已经学会了在Jxl和POI API的帮助下使用Java程序来读写Excel文件。 是否可以在macros的帮助下运行Java程序?

对的,这是可能的。

实际上有很多方法,我希望你喜欢我的例子。

为了certificate这一点,我创build了一个程序,其中一些文本作为参数发送,程序以它的改变版本进行响应。 我做了一个可运行的jar。 第一个示例从标准input读取参数和其他参数。

文件Hello.javaH1.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.javaH2.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文件中,但是您需要创build并使用清单 (这有点矫枉过正)。

现在在Excel中,我添加一个模块和一个对Windows脚本宿主对象的引用。 如果你不喜欢sleep ,那么你可以用DoEvents代替它:

 'add a reference to Windows Script Host Object Model 'for example : Tools-References Option Explicit Private 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 Loop End Sub Private 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 = exec End Function 

为了testing它,我将这些文件保存到了c:\ drive中,并使用了代码:

 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.ReadAll End Sub 

在我的情况下,我收到了一个响应:

标准输出:你好玛格斯。

标准输出:你好玛格斯。

如果你发现这个有用,不要忘记注意:D

您的VBA可以将输出写入文件,Java可以定期轮询文件修改,并从文件中读取。 并通过另一个文件将数据写回VBA。 VBA – Java集成几乎是不可能的,除非你只想通过System.execute(…)从shell中启动Java程序。

我用过它..注意,使用javaw,否则一个黑色的窗口popup

 Dim result As String Dim commandstr As String commandstr = "javaw -jar somejar someparameter" ' try with or without cast to string result = CStr( shellRun(commandstr) ) 'somewhere from SO but forget.. sorry for missing credits Public Function ShellRun(sCmd As String) As String 'Run a shell command, returning the output as a string' Dim oShell As Object Set oShell = CreateObject("WScript.Shell") 'run command' Dim oExec As Object Dim oOutput As Object Set oExec = oShell.exec(sCmd) Set oOutput = oExec.StdOut 'handle the results as they are written to and read from the StdOut object' Dim s As String Dim sLine As String While Not oOutput.AtEndOfStream sLine = oOutput.ReadLine If sLine <> "" Then s = s & sLine & vbCrLf Wend ShellRun = s End Function