2011-10-17 55 views
3

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

+2

相关? http://stackoverflow.com/questions/2805763/call-a-vb-macro-from-java-code –

回答

6

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

但是,如果你真的需要调用在纸张上的Excel宏,那么你需要两样东西:

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

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

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

谢谢您的回应先生。 –

0

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

+0

谢谢你的回应先生。其实我们有一个已经设计好的excel模板。我想用java填充该模板。在填充模板时,我们需要调用一些宏函数来处理写入的数据。我们正在使用JExcel阅读excel。但是我们不知道可以从中调用宏。那么你知道jxl可以用于这个目的吗? –

+0

JExcel与Apache POI类似。它是一个独立于平台的库,用于在不使用Excel本身的情况下读取和写入Excel文件。你不能用它运行一个宏。但JExcel能够打开现有的Excel文件(您的模板),向其中添加数据并进行各种格式化。所以我建议你使用JExcel实现宏将做的事情。如果您需要在非Windows平台或服务器环境(例如,Web应用程序)中运行它,则无论如何您都无法运行Excel宏,因为Excel仅支持Windows且仅支持单用户环境。 – Codo

+0

感谢Codo,我们目前正在使用JExcel,我们也认为我们应该使用它,而不是为项目引入新的API。是的,我们将执行所需的编码,因为我们仍然无法找到如何从java调用宏。所以我们只用这种方式来格式化和改变JExcel相关的东西。再一次感谢你。 –

0

您可能还可以当一个工作表的变化,你可以在Excel中捕捉到的事件,甚至打电话给你它想要的宏,所以如果你想打电话宏“蓝色”,你可以在一个隐藏的工作表中写入“蓝色”,然后Excel将捕获这些变化,当你捕捉到变化时,你可以看到写入的内容,并执行一些ifelse语句来获得你想要调用的宏实例。不是很好的编码,而是一个简单的解决方法。我会尽自己的其他方法。

+0

感谢Jon的回答,我们也可以这样做。但它是一个乏味的。目前,我们在一本充满宏的工作簿中有大约10张工作表。因此插入一个新的宏并维护它是一项艰巨的工作。 –

+0

它不会这样做,但它会工作,我会设置一个事件处理程序类,所以你不必把它放在每个工作表上。 – Jon49

+0

宏中的事件处理程序'类'?怎么做 ?? –

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);