我正在使用Jacob调用驻留在Excel文件中的宏中的VB函数。
这是我的代码:[我将文件和vb函数名称作为参数传递给下面的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();
}
}
代码运行正常,但我的问题是我不想调用instrcution
Dispatch workBook = Dispatch.call(workbooks, "Open", file.getAbsolutePath()).toDispatch();
显示默认宏执行的内容(带输入字段的接口)。
有没有办法在没有“打开”Excel文件的情况下“运行”VB功能?
感谢。
答案 0 :(得分:2)
没有办法在不打开文件的情况下在Excel工作簿中执行VBA功能...
当然,您可以通过禁用Excel Application对象上的事件来阻止运行AUto_open宏。
在Excel VBA中,我们这样做:
Application.enableevents=false
(经常与ScreenUpdating和DisplayAlerts等其他设置一起使用)
在Java中你可能会使用:
excel.setProperty("EnableEvents", new Variant(false));
我希望指针你朝正确的方向发展(大声笑,热潮!)
菲利普