Microsoft Excel宏运行Java程序(Microsoft Excel Macro to

2019-06-26 01:58发布

我已经学会了阅读和使用Java程序与JXL和POI API的帮助下写一个Excel文件。 是否有可能运行与宏的帮助下,Java程序?

Answer 1:

对的,这是可能的。

有相当实际上是一些方法,我希望你喜欢我的例子。

为了证明这一点,我在那里创造一些文字被发送的参数和程序与它的一个修改过的版本响应的程序。 我做的是一个可运行的罐子。 第一示例读取来自ARGS从标准输入参数和其他。

文件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());
    }
}

你可以将它们保存在一个罐子,但那么你需要创建并使用一个清单 (这是一个有点矫枉过正)。

现在,在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

并测试它,我保存的文件到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.ReadAll
End Sub

在我来说,我得到的性反应:

STDOUT:你好Margus。

STDOUT:你好Margus。

如果你发现这个有用,别忘了给予好评:d



Answer 2:

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



Answer 3:

我用它..请注意,使用javaw进程,否则黑窗口弹出

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


文章来源: Microsoft Excel Macro to run Java program