小编典典

使用Apache POI在Excel中的单元格中读取问题

java

我正在尝试使用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的第一个单元格时,它不打印任何内容,因此我认为我无法正确访问它。


阅读 292

收藏
2020-11-26

共1个答案

小编典典

最好先评估单元格的类型,然后再执行所需的操作。我使用以下代码来处理单元格数据(检查是否还要处理空白单元格):

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;
}
2020-11-26