如何使用Jacob(Java)保存Excel文件

时间:2011-09-12 13:58:15

标签: java excel jacob

我正在尝试保存excel文件,但它会出错:无法将名称映射到dispid:FileSaveAs。

private ActiveXComponent objExcel = new ActiveXComponent("Excel.Application");
excelObject = objExcel.getObject();
Dispatch.put(excelObject, "Visible", new Variant(false));
workbook = objExcel.getProperty("Workbooks").toDispatch();
workbook = Dispatch.call(workbook, "Open", filename).toDispatch();
Dispatch oExcel = Dispatch.call(objExcel, "Workbooks").getDispatch();
Dispatch.call(workbook, "FileSaveAs", filename, new Variant(51));

变体的参数取自:http://msdn.microsoft.com/en-us/library/bb241279(v=office.12).aspx

有人能告诉我代码中的问题在哪里?感谢

3 个答案:

答案 0 :(得分:1)

我不确定我是否使用正确的方法来做,但它有效

public Boolean savesAS(String path, String nameFile){

    ComThread.InitSTA();

    ActiveXComponent excel = new ActiveXComponent("Excel.Application");
    excel.setProperty("Visible", new Variant(true));
    Object workbooks = excel.getProperty("Workbooks").toDispatch();
    Object workbook;

    try {            
        workbook = Dispatch.call((Dispatch)workbooks, "Open", path).toDispatch();           
    } catch (Exception e) {
        showMessageDialog(null,"Unable to open " + path);
        return false;
    }

    try {
        //here you can modify the value of "new Variant(int)" with other number
        Dispatch.call((Dispatch)workbook, "SaveAs", nameFile ,new Variant(2)); 
    } catch (Exception e) {
         showMessageDialog(null,"Unable to convert " + path);
        return false;
    }

    Dispatch.call((Dispatch)workbook, "Close", new Variant(false));

    excel.invoke("Quit", new Variant[0]);
    excel.safeRelease();
    ComThread.Release();

    return true;
}

答案 1 :(得分:0)

如错误所述,它无法找到“FileSaveAs”方法。我试图在Google / Documentation中查找它并找不到它(也许它存在但我找不到它)。我找到了SaveAs。所以尽量使用它,看看会发生什么。

答案 2 :(得分:0)

是的,你是对的,它确实适用于“Saveas”。实际上“FileSaveAs”与word文档一起使用,所以我想用Excel和Powerpoint尝试它,但是它有效...

要保存excel工作簿,此代码有效:

 Dispatch.call(workbook, "SaveAs", filename, new Variant(1));