我的解释有点复杂,所以我很抱歉,但这是我在部署之前的最后一个错误。
我的程序迭代到excel文档的最后一行并重新计算,直到找到“”或“null”之外的其他内容,因为我需要抓取列的最后6个数据点,并且这样做会跳过不可见的垃圾数据和空白单元格。
使用一些较旧的Excel工作表(在excel 2003中创建,或者可能更早),我的程序可以找到最后一个单元格(我在运行时打印坐标,所以我知道它的发现)但声称细胞是空白的。当我打开excel文档时,包含数据的最后一个单元格确实不是空白。使用较新的excel文档(xlsx或xls,只要是为office 2010制作),没有错误,每次都有效,所以我不确定我的问题是什么。我不能抓回一个空单元格,因为如果它不能读取最后6个单元格中的所有六个单元,那么从程序中运行是没有意义的,所以实际上没有捕获动作。我该怎么办?
我搜索最后一行的代码在这里:
while (cell == null || cell.toString() == "") {
row = insheet.getRow(rownum);
cell = row.getCell(column);
System.out.println("skipping rownum: " + rownum);
rownum--;
}
System.out.println(" Last cell is B" + (rownum+1) + ": " + cell.toString());
rownum--; //last cell is actually blank, go back up one more.
我从底部向上抓住最后6个单元格:
//iterate back up 6 times and store the values
while (ctr > 0) {
String str = "";
//update cell location
row = insheet.getRow(rownum);
cell = row.getCell(column);
//find the contents of the cell
/*
* getCellType(), order:
* Numeric Cell Type (0)
* String Cell type (1)
* Formula Cell type (2)
* Blank Cell type (3)
* Boolean Cell type (4)
* Error Cell type (5)
*/
if (cell.getCellType() == 1) {
//System.out.println("Cell is a string."); //for testing
str = cell.toString();
System.out.println(str);
num = Double.parseDouble(str); //possible error on this line.
} else if (cell.getCellType() == 0) {
//System.out.println("Cell is a numerical value."); //for testing
num = cell.getNumericCellValue();
} else {
System.err.println("Error, sheet needs cleaned.");
System.exit(0);
}
//update the contents of the temporary holder
latency.add(num);
//increase the number of runs
ctr--;
//move up one cell
rownum--;
}
我得到的实际错误是在线:
num = Double.parseDouble(str); //possible error on this line.
但这只是因为它的解析是“”因为该单元格由于某种原因被认为是空白的。这也告诉我检查器正在考虑它的单元格类型1(字符串)。
另一件需要考虑的事情是,我有时会收到运行时错误,说明该文件不在ooxml或olee中。此错误并不总是与空白单元格问题同时发生,而是来自excel文件的同一时代。