问题从Excel的单元读取与Apache POI(Issue reading in a cell f

2019-07-29 17:16发布

我试图使用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是不是空或空文档中的最后一个单元格。 当我尝试打印,这不是空或空的第一个单元格,它打印什么,所以我觉得我不能正确访问它。

Answer 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;
}


Answer 2:

也许,你为什么要在空白单元读取原因是由于到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中 。



Answer 3:

这将是很好,如果我们都知道什么样的代码行数导致异常。

我怀疑你的第一行代码是起因。 目标小区可为空,一个空地址不能被转换为字符串类型。 您可以通过代码检查。

注:这是很好的代码工作与Office 2010,但我认为这种类型的问题可以在任何Excel版本发生。



文章来源: Issue reading in a cell from Excel with Apache POI