从Java调用VBA代码

时间:2011-07-26 16:46:12

标签: java vba dll netbeans excel-vba

问候StackOverflow,

我搜索了更大的互联网,并受到大量帖子或解答与我正在尝试的相反顺序的答案的阻碍。

我有一个包含大量VBA代码的Excel文件。在Excel中打开文档时,有4个公共子例程不占用用户可以调用的参数,这些子例程根据需要操作各个工作表中的数据。我们有一个大型Java应用程序,我们希望通过从Java环境调用宏来与该文档进行交互。关键是我们只需编写一次VBA代码,然后Java就可以调用它来执行。此外,我们假设Java应用程序的用户不一定能立即访问Excel,而是在Windows机器上运行。一个人应该怎么做呢?

我们是否将VBA代码编译成DLL,并从Java中调用它?如何编译DLL,是否需要使用Visual Studio?我们如何从Java调用DLL?我们应该尝试某种COM对象吗?

请注意,作为我在其他地方问题的最常见答案,我非常清楚如何从VBA中调用Java,而不是从Java调用VBA。

提前谢谢。

1 个答案:

答案 0 :(得分:8)

我基本上看到了三种从Java应用程序调用Excel中的VBA代码的选项:

  1. Java COM Bridge :有几种工具可用于从Java调用COM或COM Automation组件。 Excel就是这样一个组件。我知道JacobJCom,但可能会提供更多此类工具。

  2. Java / VBScript / COM Automation :由于您显然不需要将数据传递给VBA代码,最简单的解决方案可能是编写一个启动Excel的VBScript,打开文档,调用宏并关闭Excel。此脚本使用Runtime.getRuntime().exec("cmd /c start script.vbs");

  3. 从Java启动
  4. JNI :您可以为应用程序编写特定的DLL。它实现了JNI接口,因此可以从Java调用它。它的实现使用COM调用来使用Excel。这样的DLL最好用VisualStudio编写,它支持C ++来调用COM对象。

  5. 无论您的解决方案是什么,您基本上都希望在Excel自动化界面上执行以下命令(VBScript中的示例):

    Dim xl
    Set xl = CreateObject("Excel.Application")
    xl.Workbooks.Open ("workbook.xlsx")
    xl.Application.Run "MyMacro"
    xl.Application.Quit
    Set xl = Nothing 
    

    您无法将VBA代码编译为DLL。没有工具(与完整的Visual Basic相比)。

    我希望这个答案有用,即使我不明白你的意思:“我们想要假设Java应用程序的用户不一定能立即访问Excel,而是在运行Windows机器。“