[英]How to call an Excel VBA Macro from Java Code?
我需要從通過Java從數據庫中獲取的數據生成Excel工作表。 為此,我需要在生成Excel時調用一些VBA宏函數。 任何人都可以幫助我如何從Java代碼調用VBA宏?
我真的不了解從數據庫中的數據生成Excel工作表的整體方法。 通常,我會使用Vivek提出的Apache POI。
但是,如果您確實需要在工作表中調用Excel宏,那么您需要兩件事:
首先,您需要一個JAVA到COM橋,如JACOB , COM4J或類似的工具。 如果它支持自動化接口就足夠了。 它不需要完整的COM支持。
其次,使用JAVA-to-COM橋接器,您應該啟動Excel,加載Excel工作表,運行宏,保存並關閉Excel。 所以你必須調用相當於:
Set Wb = Application.Workbooks.Open FileName
Application.Run MacroName
Wb.Save
Application.Quit
如果您不能使用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);
適用於我的解決方案: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
我不確定是否可以直接從Java調用宏。 但是,當用戶第一次打開Excel工作表時,您可以在Excel工作表中填充數據並調用宏。 您可以使用Apache POI工具在包含宏的Excel工作表中填充數據 - http://poi.apache.org/spreadsheet/index.html
您可能還能夠在工作表更改時在Excel中捕獲事件,您甚至可以調用所需的宏,因此如果要調用宏“藍色”,則可以在隱藏的工作表中寫入“藍色” Excel將捕獲更改,當您捕獲更改時,您可以看到寫入的內容,並執行一些ifelse語句以獲取要為該實例調用的宏。 不是很好的編碼,但一個簡單的解決方法。 我會自己做其他方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.