Как сохранить файл Excel с помощью Jacob (Java) - PullRequest
0 голосов
/ 12 сентября 2011

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

1 голос
/ 28 августа 2015

Я не уверен, правильно ли я это делаю, но это работает

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;
}
0 голосов
/ 19 сентября 2011

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

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

 Dispatch.call(workbook, "SaveAs", filename, new Variant(1)); 
0 голосов
/ 12 сентября 2011

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

...