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.