Как сохранить файл Excel с помощью Jacob (Java)

Я пытаюсь сохранить как файл 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

Может ли кто-нибудь сказать мне, где проблема в коде? Спасибо


person Probe    schedule 12.09.2011    source источник


Ответы (3)


Я не уверен, что использую правильный способ сделать это, но он работает

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;
}
person LDG    schedule 28.08.2015

Да, вы правы, это работает с «Saveas». На самом деле «FileSaveAs» работает с текстовым документом, поэтому я подумал попробовать его с Excel и Powerpoint, но это не сработало...

Чтобы сохранить книгу Excel, этот код работает:

 Dispatch.call(workbook, "SaveAs", filename, new Variant(1)); 
person Probe    schedule 19.09.2011

Как указано в ошибке, он не может найти метод «FileSaveAs». Я пытался найти его в Google/Documentation и не смог найти (возможно, он существует, но я не смог его найти). Вместо этого я нашел SaveAs. Так что попробуйте использовать это и посмотрите, что произойдет.

person Community    schedule 12.09.2011