Jacob:在Excel文件中调用vb函数而不调用“Open”语句

时间:2013-03-25 10:10:04

标签: java excel-vba jacob vba excel

我正在使用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功能?

感谢。

1 个答案:

答案 0 :(得分:2)

没有办法在不打开文件的情况下在Excel工作簿中执行VBA功能...

当然,您可以通过禁用Excel Application对象上的事件来阻止运行AUto_open宏。

在Excel VBA中,我们这样做:

Application.enableevents=false

(经常与ScreenUpdating和DisplayAlerts等其他设置一起使用)

在Java中

你可能会使用:

excel.setProperty("EnableEvents", new Variant(false));

我希望指针你朝正确的方向发展(大声笑,热潮!)

菲利普