英文:
Java+jopendocument: NullPointerException when using getCellAt(0,0)
问题
在LibreOffice电子表格的工作表中,我可以访问单元格,但无法访问其值。我找不到错误所在,欢迎任何反馈意见。以下是代码:
```java
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("行数:" + numRows);
System.out.println("位于 0,0 的单元格:" + dataSheet.getCellAt(0, 0));
System.out.println("获取位于 0,0 处单元格值时出现空指针异常:" + dataSheet.getValueAt(0, 0)); // *** 臭名昭著的问题 ***
} catch (Exception e) {
System.out.println(e);
}
}
}
以下是控制台输出:
行数:107
位于 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
英文:
In a Libreoffice Spreadsheet's sheet, I can get access to a Cell, but not to its value. I don't find my error, any feedback is welcome. Here is the code:
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);
}
}
}
And here is the output at console:
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
答案1
得分: 5
刚刚发现:
"是的,LibreOffice 7 切换到了 OpenDocument 1.3。我们正在努力支持它。与此同时,您可以将格式更改为“1.2 扩展”。进入选项,然后选择加载/保存,接着选择常规,然后选择 ODF 格式版本。"
对我来说有效,但我很期待听到我的客户意见...
英文:
Just found that:
"Yes, LO 7 switched to OpenDocument 1.3. We're working on supporting it. In the mean time, you can change the format to "1.2 extended". Go to Options, then Load/Save, then General, then ODF format version."
It works for me, but am excited to hear my customers opinion...
答案2
得分: 0
我发现** jopendocument库与较新版本的Libreoffice(7.x)之间必定存在某种不兼容性**,如上面的代码所示:
- 如果使用Libreoffice 6.4.3.2编辑电子表格,则按预期工作。
- 如果使用Libreoffice 7.0.1.2编辑电子表格,则会抛出空指针异常。
在某些版本中,Calc生成的XML文件无法被jopendocument解析。
英文:
I found that it must be some incompatibility between the library jopendocument and the newer versions of Libreoffice (7.x), as the code above:
- Works as expected if the spreadsheet is edited with Libreoffice 6.4.3.2
- Spits the null pointer exception out if the spreadsheet is edited with Libreoffice 7.0.1.2
In some version in between Calc produces an XML not understood by jopendocument.
答案3
得分: 0
代替使用
getValueAt(0, 0),
你可以使用
getCellAt(0, 0).getElement().getValue()
这对我有效。
英文:
Instead of using
getValueAt(0, 0),
you can use
getCellAt(0, 0).getElement().getValue()
It works for me.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论