Java+jopendocument: NullPointerException при использовании getCellAt(0,0)

В таблице Libreoffice Spreadsheet я могу получить доступ к ячейке, но не к ее значению. Я не нашел своей ошибки, любые отзывы приветствуются. Вот код:

import java.io.File;
import java.io.IOException;
import org.jopendocument.dom.spreadsheet.MutableCell;
import org.jopendocument.dom.spreadsheet.Sheet;
import org.jopendocument.dom.spreadsheet.SpreadSheet;

public class MyClass {
    protected Sheet dataSheet;
    protected File dataCalcFile;
    
    public static void main(String[] args) {
        MyClass myClassInstance = new MyClass(); 
        myClassInstance.loadData();
    }

    public void loadData() {
        int numRows=0, numColumnas=0;
        MutableCell cell=null;
        
        try {
            dataCalcFile = new File(""C:\\temp\\Data.ods"");
            dataSheet = SpreadSheet.createFromFile(dataCalcFile).getSheet(0);
            numRows = dataSheet.getRowCount();            
            System.out.println("Number of rows: " + numRows);
            System.out.println("Cell at 0,0: " + dataSheet.getCellAt(0, 0));
            System.out.println("Nullpointer Exception when getting cell value at 0,0: " + dataSheet.getValueAt(0, 0));  // *** THE INFAMOUS ONE ***     
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

А вот вывод на консоль:

Number of rows: 107
Cell at 0,0: <table:table-cell xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" table:style-name="ce1" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:value-type="string" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" calcext:value-type="string"><text:p xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0">Carpeta</text:p></table:table-cell>
java.lang.NullPointerException

3 ответа

Только что обнаружил, что: «Да, LO 7 перешел на OpenDocument 1.3. Мы работаем над его поддержкой. А пока вы можете изменить формат на «1.2 расширенный». Перейдите в «Параметры», затем «Загрузить/Сохранить», затем «Общие», затем версия формата ODF».

Это работает для меня, но я рад услышать мнение моих клиентов...

Вместо использования

      getValueAt(0, 0), 
you can use 
getCellAt(0, 0).getElement().getValue()

Меня устраивает.

Я обнаружил, что между библиотекой jopendocument и более новыми версиями Libreoffice (7.x) должна быть некоторая несовместимость, как в приведенном выше коде:

  • Работает, как ожидалось, если таблица редактируется с помощью Libreoffice 6.4.3.2.
  • Выдает исключение нулевого указателя, если электронная таблица редактируется с помощью Libreoffice 7.0.1.2

В некоторой промежуточной версии Calc создает XML, не понимаемый jopendocument.

Другие вопросы по тегам