我正在尝试使用Apache POI读取旧的(2007年前和XLS前)Excel文件。我的程序转到行的末尾并进行迭代,直到找到不为null或为空的值。然后迭代回去几次并获取这些单元格。该程序可以很好地读取Office 2010中制作的XLSX和XLS文件。
我收到以下错误消息:
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是文档中最后一个不为空或为null的单元格。当我尝试打印不为空或为null的第一个单元格时,它不打印任何内容,因此我认为我无法正确访问它。
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; }