如何从Java代码调用Excel VBA宏?

问题描述 投票:4回答:5

我需要从通过Java从数据库中获取的数据生成Excel工作表。为此,我需要在生成Excel时调用一些VBA宏函数。任何人都可以帮助我如何从Java代码调用VBA宏?

java excel vba excel-vba
5个回答
7
投票

我真的不了解从数据库中的数据生成Excel工作表的整体方法。通常,我会使用Vivek提出的Apache POI。

但是,如果您确实需要在工作表中调用Excel宏,那么您需要两件事:

首先,你需要一个JAVA-to-COM桥,如JACOBCOM4J或类似的工具。如果它支持自动化接口就足够了。它不需要完整的COM支持。

其次,使用JAVA-to-COM桥接器,您应该启动Excel,加载Excel工作表,运行宏,保存并关闭Excel。所以你必须调用相当于:

Set Wb = Application.Workbooks.Open FileName
Application.Run MacroName
Wb.Save
Application.Quit

5
投票

如果你不能使用JACOBCOM4J,你可以制作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);

0
投票

我不确定是否可以直接从Java调用宏。但是,当用户第一次打开Excel工作表时,您可以在Excel工作表中填充数据并调用宏。您可以使用Apache POI工具 - http://poi.apache.org/spreadsheet/index.html在包含宏的Excel工作表中填充数据


0
投票

您可能还能够在工作表更改时在Excel中捕获事件,您甚至可以调用所需的宏,因此如果要调用宏“蓝色”,则可以在隐藏的工作表中写入“蓝色” Excel将捕获更改,当您捕获更改时,您可以看到写入的内容,并执行一些ifelse语句以获取要为该实例调用的宏。不是很好的编码,但一个简单的解决方法。我会自己做其他方法。


0
投票

适用于我的解决方案: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 
© www.soinside.com 2019 - 2024. All rights reserved.