从Java调用VBA代码

Rei*_*vax 10 java dll vba 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.

先感谢您.

Cod*_*odo 8

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

  1. Java COM Bridge:有几种工具可用于从Java调用COM或COM Automation组件.Excel就是这样一个组件.我知道雅各布JCom,但可能会有更多这样的工具.

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

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

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

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

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

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