2011-10-17 84 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);