簡體   English   中英

如何從 Java 在 Excel 電子表格中調用 VBA 代碼?

[英]How do I call VBA code in an Excel spreadsheet from Java?

我有一個包含大量 VBA 代碼的 Excel 文件。 當在 Excel 中打開文檔時,有 4 個不帶參數的公共子例程可以由用戶調用,這些子例程根據需要操作各種工作表中的數據。 我們有一個大型 Java 應用程序,我們希望通過從 Java 環境調用宏來與該文檔進行交互。 關鍵是我們只需要編寫一次 VBA 代碼,然后 Java 就可以調用它來執行。 此外,我們想假設 Java 應用程序的用戶不一定可以立即訪問 Excel,而是在 Windows 機器上操作。 應該怎么做呢?

我們是否將 VBA 代碼編譯成 DLL,並從 Java 內部調用它? 你如何編譯 DLL,這是否需要使用 Visual Studio? 我們如何從 Java 調用 DLL? 我們應該嘗試某種 COM 對象嗎?

我基本上看到了從 Java 應用程序在 Excel 中調用 VBA 代碼的三個選項:

  1. Java COM 橋:有多種工具允許您從 Java 調用 COM 或 COM 自動化組件。 Excel 就是這樣一個組件。 我知道JacobJCom ,但可能有更多這樣的工具可用。

  2. Java / VBScript / COM 自動化:由於您顯然不需要將數據傳遞給 VBA 代碼,最簡單的解決方案可能是編寫一個 VBScript 來啟動 Excel、打開文檔、調用宏並關閉 Excel。 這個腳本是從 Java 啟動的Runtime.getRuntime().exec("cmd /c start script.vbs");

  3. JNI :您可以為您的應用程序編寫特定的 DLL。 它實現了 JNI 接口,因此可以從 Java 調用。 它的實現使用 COM 調用來處理 Excel。 這樣的 DLL 最好用 VisualStudio 編寫,它支持 C++ 調用 COM 對象。

無論您的解決方案是什么,您基本上都希望在 Excel 自動化界面(VBScript 中的示例)上執行以下命令:

Dim xl
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open ("workbook.xlsx")
xl.Application.Run "MyMacro"
xl.Application.Quit
Set xl = Nothing 

不能將 VBA 代碼編譯成 DLL。 不存在用於此的工具(與完整的 Visual Basic 相比)。

盡管我不明白您的意思,但我希望這個答案有所幫助: “我們想假設 Java 應用程序的用戶不一定可以立即訪問 Excel,而是在 Windows 機器上運行。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM