如何阅读与雅各布Java的Excel个人macros

我得从jacob执行一个excel文件的macros,但现在我想执行一个personal.xlsb!mymacro和我的java程序抛出错误。 我不知道如何写个人macros的名字,我说:

String file =“D:/Aprogramas/EclipseJEE/temp/Libro2.xlsm”

public boolean openFile`(String file) { try { final String macroName = "!PERSONAL.XLSB!Auto_abrir"; executeMacro(new File(file), macroName); return true; } catch (Exception e) { e.printStackTrace(); } return true; } public boolean executeMacro(File file, String macroName) { ComThread.InitSTA(); final ActiveXComponent excel = new ActiveXComponent("Excel.Application"); try { final Dispatch workbooks = excel.getProperty("Workbooks") .toDispatch(); final Dispatch workBook = Dispatch.call(workbooks, "Open", file.getAbsolutePath()).toDispatch(); final Variant result = Dispatch.call(excel, "Run", new Variant(file.getName() + macroName)); 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(); return true; } } 

控制台中的错误是:

 com.jacob.com.ComFailException: Invoke of: Run Source: Microsoft Excel Description: No se puede ejecutar la macro "Libro2.xlsm!PERSONAL.XLSB!Auto_abrir". Puede que la macro no esté disponible en este libro o que se hayan deshabilitado todas las macros. at com.jacob.com.Dispatch.invokev(Native Method) at com.jacob.com.Dispatch.invokev(Dispatch.java:625) at com.jacob.com.Dispatch.callN(Dispatch.java:453) at com.jacob.com.Dispatch.call(Dispatch.java:541) at com.test.main.POIExecutor.executeMacro(POIExecutor.java:43) at com.test.main.POIExecutor.openFile(POIExecutor.java:23) at com.test.main.Main.main(Main.java:11) 

不需要在Dispatch.call方法中附加macroname的文件名。

从Dispatch.call方法中删除“new Variant(file.getName()+”部分

 final Variant result = Dispatch.call(excel, "Run", **new Variant(file.getName() +** macroName)); 

正确的方法是

 final Variant result = Dispatch.call(excel, "Run", macroName)); 

它将执行没有错误。