繁体   English   中英

如何从 Java 在 Excel 电子表格中调用 VBA 代码?

[英]How do I call VBA code in an Excel spreadsheet from Java?

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

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

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

  1. Java COM 桥:有多种工具允许您从 Java 调用 COM 或 COM 自动化组件。 Excel 就是这样一个组件。 我知道JacobJCom ,但可能有更多这样的工具可用。

  2. Java / VBScript / COM 自动化:由于您显然不需要将数据传递给 VBA 代码,最简单的解决方案可能是编写一个 VBScript 来启动 Excel、打开文档、调用宏并关闭 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 

不能将 VBA 代码编译成 DLL。 不存在用于此的工具(与完整的 Visual Basic 相比)。

尽管我不明白您的意思,但我希望这个答案有所帮助: “我们想假设 Java 应用程序的用户不一定可以立即访问 Excel,而是在 Windows 机器上运行。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM