我试图使用Apache POI老(前2007年和XLS)Excel文件阅读。 我的计划去行和迭代结束回退,直到它找到的东西,这不是空值或空。 然后,它遍历备份几次,抓住这些细胞。 此程序可以在XLSX就好了阅读和XLS文件在Office 2010中取得。
我收到以下错误信息:
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
在该行:
num = Double.parseDouble(str);
从代码:
str = cell.toString();
if (str != "" || str != null) {
System.out.println("Cell is a string");
num = Double.parseDouble(str);
} else {
System.out.println("Cell is numeric.");
num = cell.getNumericCellValue();
}
其中, cell
是不是空或空文档中的最后一个单元格。 当我尝试打印,这不是空或空的第一个单元格,它打印什么,所以我觉得我不能正确访问它。
这将是更好地评估细胞类型,然后做你的需要。 我用这个代码来处理单元格数据(检查我甚至处理空白单元格):
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
str = cell.toString().trim();
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
//you should change this to your application date format
objSimpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
str = objSimpleDateFormat.format(cell.getDateCellValue());
} else {
num = cell.getNumericCellValue();
str = String.valueOf(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BLANK:
str = "";
break;
case Cell.CELL_TYPE_ERROR:
str = "";
break;
case Cell.CELL_TYPE_BOOLEAN:
str = String.valueOf(cell.getBooleanCellValue());
break;
}
也许,你为什么要在空白单元读取原因是由于到Apache POI的右子来读取Excel文件的使用。 使用HSSF(可怕的电子表格格式)为XLS格式和XSSF(XML电子表格格式)为XLSX格式。
至于代码本身,你可能要细化布尔表达式。 你现在,因为你正在使用或操作(方式||
)
- 你的if语句的第一部分将执行,如果
str != null
,和 - 在
else
的if语句的部分将执行,如果str == null
。
if语句的第一部分将抛出一个NumberFormatException
呼吁Double.parseDouble
如果str
不能被解析为一个数字。
也许下面的代码片段将帮助您:
if (str == null || str.trim().isEmpty()) {
// handle null and empty strings
} else if (cell.getType() == Cell.CELL_TYPE_NUMERIC) {
System.out.println("Cell is numeric.");
num = cell.getNumericCellValue();
} else {
// If the cell is not numeric, Double.parseDouble(str)
// will most likely throw a NumberFormatException
}
要了解更多关于Cell
,阅读它的Javadoc中 。
这将是很好,如果我们都知道什么样的代码行数导致异常。
我怀疑你的第一行代码是起因。 目标小区可为空,一个空地址不能被转换为字符串类型。 您可以通过代码检查。
注:这是很好的代码工作与Office 2010,但我认为这种类型的问题可以在任何Excel版本发生。