【发布时间】:2011-10-17 05:41:45
【问题描述】:
我需要从通过 Java 从数据库中获取的数据生成 Excel 工作表。 为此,我需要在生成 Excel 时调用一些 VBA 宏函数。 谁能帮助我如何从 Java 代码调用 VBA 宏?
【问题讨论】:
我需要从通过 Java 从数据库中获取的数据生成 Excel 工作表。 为此,我需要在生成 Excel 时调用一些 VBA 宏函数。 谁能帮助我如何从 Java 代码调用 VBA 宏?
【问题讨论】:
您还可以在工作表更改时在 excel 中捕获事件,您甚至可以调用您想要的任何宏,因此如果您想调用宏“Blue”,您可以在隐藏的工作表,然后 Excel 将捕获更改,当您捕获更改时,您可以查看写入的内容并执行一些 ifelse 语句以获取您要为该实例调用的宏。不是很好的编码,但一个简单的解决方法。不过我会自己做其他方法。
【讨论】:
适合我的解决方案: java代码:
try {
Runtime.getRuntime().exec("wscript yourPth\\myVBS.vbs");
} catch (IOException e) {
System.out.println(e);
System.exit(0);
}
myVBS.vbs 脚本:
Set objShell = CreateObject("WScript.Shell")
Dim cur
cur = "urpath to myVBS.vbs script"
WScript.Echo cur
ExcelMacroExample
Sub ExcelMacroExample()
Dim xlApp
Dim xlBook
Dim xlsFile
xlsFile = cur & "\myExcel.xlsm"
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(xlsFile)
xlApp.Run "moduleName"
xlApp.Save
xlApp.Quit
End Sub
【讨论】:
如果您不能使用JACOB 或COM4J,您可以制作一个Visual Basic 脚本并从您的Java 程序中运行该脚本。
要创建脚本打开记事本并编写如下内容:
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("myExcel.xlsm")
objExcel.Application.Run "myExcel.xlsm!MyMacroName"
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit
WScript.Quit
将其保存为myVBS.vbs,您可以在 Java 代码中这样调用它:
cmd = "you_path\\myVBS.vbs";
Runtime.getRuntime().exec(cmd);
【讨论】:
我不太了解您从数据库中的数据生成 Excel 工作表的整体方法。通常,我会使用 Vivek 建议的 Apache POI。
但是,如果您确实需要在工作表中调用 Excel 宏,那么您需要做两件事:
首先,您需要像JACOB、COM4J 或类似工具这样的 JAVA 到 COM 桥接器。如果它支持自动化接口就足够了。它不需要完全的 COM 支持。
其次,使用 JAVA-to-COM 桥,您应该启动 Excel,加载 Excel 工作表,运行宏,保存并关闭 Excel。所以你必须调用相当于:
Set Wb = Application.Workbooks.Open FileName
Application.Run MacroName
Wb.Save
Application.Quit
【讨论】:
我不确定是否可以直接从 Java 调用宏。但是您可以在 excel 表中填充数据并在用户第一次打开 excel 表时调用宏。您可以使用 Apache POI 工具在包含宏的 Excel 工作表中填充数据 - http://poi.apache.org/spreadsheet/index.html
【讨论】: