poi读取Excel文件执行到row.getCell(0).getStringCellValue()异常

环境说明

POI:poi.3.1.1.jar
Excel文件:
poi读取Excel文件执行到row.getCell(0).getStringCellValue()异常_第1张图片

具体问题

测试导入Excel文件,并将文件数据批量导入数据库功能时,一直无法成功导入,不打断点没有抛任何异常,部分代码如下:

/**
     * 导入区域文件数据
     * @return
     * @throws Exception
     */
    public String importXls() throws Exception {
        List regionList = new ArrayList();
        HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(regionFile));
        // 根据名称获得指定Sheet对象
        HSSFSheet hssfSheet = workbook.getSheet("Sheet1");
        for (Row row : hssfSheet) {
            int rowNum = row.getRowNum();
            if (rowNum == 0) {
                continue;
            }
            String idStr = row.getCell(0).getStringCellValue();
            Integer id = new Integer(idStr);
            String province = row.getCell(1).getStringCellValue();
            String city = row.getCell(2).getStringCellValue();
            String district = row.getCell(3).getStringCellValue();
            String postcode = row.getCell(4).getStringCellValue();

设置断点后,执行到String idStr = row.getCell(0).getStringCellValue(); 出错,如下:
poi读取Excel文件执行到row.getCell(0).getStringCellValue()异常_第2张图片

猜测应该是获取不到Cell的内容,对比文件发现区域编号都是数字,才找出问题所在。

解决方案

在遍历Cell的时候,加上如下代码:

// 将区域编号的cell中的内容当做字符串处理
row.getCell(0).setCellType(HSSFCell.CELL_TYPE_STRING);

总结

Excel中cell的内容可能是纯数字,可能是字符,可根据不同的方法来获取值。
对于纯数字,可用getNumericCellValue()获取
对于字符,可用getStringCellValue()获取
也可用setCellType(HSSFCell.CELL_TYPE_STRING)统一将cell中的内容当做字符串
或者用getCellType()获取类型,再根据不同类型调用不同的方法来获取内容

你可能感兴趣的:(Java)