Я использую Jacob для вызова функции VB, которая находится в макросе в файле Excel.Jacob: вызов функции vb в файле Excel без вызова «Open»
Вот мой код: [я передаю файл и имя функции 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, когда приложение, содержащее компилятор (?), Не запущено? –
Мой Java-код будет запускать функцию VB на лету (с помощью кнопок). Таким образом, обычное выполнение: загрузить файл excel, запустить макрос и освободить объект. Надеюсь, я ответил на ваш вопрос. – javadev
После того как вы откроете код excel и enable, вы также включите любой код, который встроен или запущен Workbook_Open, я боюсь, что у вас его не будет (сценарий, который вы хотите), без другого (Workbook_Open) –