我正在使用雅可比來調用駐留在Excel文件的宏中的VB函數。雅各布:在不調用「打開」語句的情況下在Excel文件中調用vb函數
這裏是我的代碼:我的文件和VB的函數名作爲PARAMATERS傳遞給下面的Java方法]
private static void callExcelMacro(File file, String macroName) {
ComThread.InitSTA();
final ActiveXComponent excel = new ActiveXComponent("Excel.Application");
try {
// This will open the excel if the property is set to true
excel.setProperty("Visible", new Variant(false));
final Dispatch workbooks = excel.getProperty("Workbooks").getDispatch();
//String eventSink = null ;
int id = Dispatch.get(workbooks, "Count").getInt();
System.out.println("le nbre" + id);
Dispatch.call(workbooks, "Add");
Dispatch workBook = Dispatch.call(workbooks, "Open", file.getAbsolutePath()).toDispatch();
//new DispatchEvents(sourceOfEvent, eventSink, progId)
//new DispatchEvents(workBook, w , "Excel.Application");
//System.out.println("le résultat"+eventSink);
//d.safeRelease();
Variant V1 = new Variant(file.getName() + macroName);
// Calls the macro
final Variant result = Dispatch.call(excel, "Run", V1);
// Saves and closes
//Dispatch.call(workBook, "Save");
com.jacob.com.Variant f = new com.jacob.com.Variant(true);
// Dispatch.call(workBook, "Close", f);
} catch (Exception e) {
e.printStackTrace();
} finally {
excel.invoke("Quit", new Variant[0]);
ComThread.Release();
}
}
的代碼運行正常,但我的問題是,我不希望調用指令
Dispatch workBook = Dispatch.call(workbooks, "Open", file.getAbsolutePath()).toDispatch();
它向我顯示默認宏執行的操作(帶有輸入字段的接口)。
有沒有辦法「運行」的VB功能沒有「打開」Excel文件?
謝謝。
當包含編譯器(?)的應用程序未啓動時,VB代碼將如何「運行」? – 2013-03-25 11:57:06
我的Java代碼將通過按鈕即時調用VB函數。所以正常的執行是:加載excel文件,運行宏並釋放對象。希望我回答你的問題。 – javadev 2013-03-25 12:43:48
一旦你打開了excel並啓用了代碼,你還啓用了嵌入Workbook_Open或由其觸發的任何代碼,但是我擔心你不能使用其中一個(你想要的腳本)(Workbook_Open) – 2013-03-25 12:52:38