java吧 关注:1,296,908贴子:12,833,988
  • 9回复贴,共1

POI无法读取 空单元格吗? 我一取值 就报错。。。

只看楼主收藏回复

sheet.getRow(12).getCell(5).getStringCellValue();
该单元格对应的是一个空值单元格,但是取值时,就会报错,无法继续进行。。。
无法对它 进行操作。。。
这是为什么? 请问 POI怎么对空单元格 进行操作呢?


1楼2014-10-27 15:18回复


    2楼2014-10-27 15:54
    回复
      2026-02-05 09:20:46
      广告
      不感兴趣
      开通SVIP免广告
      空的是null 把 会空指针 是不


      IP属地:重庆3楼2014-10-27 17:23
      回复
        是下标越界?


        IP属地:重庆4楼2014-10-27 17:24
        回复
          获取的值判断一下 是否为null


          IP属地:重庆5楼2014-10-27 17:27
          收起回复
            /**
            * 获取单元格的值,如果为公式,则获取公式解析后的值(非公式本身)
            *
            * @param cell
            * @return
            */
            public static String getCellValue(Cell cell) {
            String cellValue = "";
            if (cell == null)
            return cellValue;
            int cType = cell.getCellType();
            try {
            switch (cType) {
            // 这里会不会有问题?会不会返回null?
            case Cell.CELL_TYPE_STRING:
            cellValue = cell.getStringCellValue();
            break;
            case Cell.CELL_TYPE_NUMERIC:
            short dateType = cell.getCellStyle().getDataFormat();
            String buildInFormat = HSSFDataFormat
            .getBuiltinFormat(dateType);
            if (HSSFDateUtil.isCellDateFormatted(cell)) {
            cellValue = getCellDateValue(cell, buildInFormat);
            } else {
            // 此为XLS内存储的真实的值,XLS不是一个所见即所得的工具,如值为0.8125,如果设置单元格
            // 为数值型,且小数位为2位,则见到的为0.81,而实际读取到的值仍为0.8125.此处添加对数值
            // 型数据的格式化,以满足获取所见的数值所需;
            // (实际上仍存在瑕疵,如设置的小数位为5位,但无法获取其数值类型,故无法取到正确的显示值)
            cellValue = getCellNumericValue(cell, buildInFormat);
            }
            break;
            case Cell.CELL_TYPE_BLANK:
            break;
            case HSSFCell.CELL_TYPE_FORMULA:
            // 是公式,获取公式值
            cellValue = getFormulaValue(cell);
            break;
            case Cell.CELL_TYPE_BOOLEAN:
            cellValue = Boolean.toString(cell.getBooleanCellValue());
            break;
            case Cell.CELL_TYPE_ERROR:
            cellValue = Byte.toString(cell.getErrorCellValue());
            break;
            default:
            cellValue = cell.getStringCellValue();
            break;
            }
            } catch (Exception e) {
            log.error(
            new StringBuilder("读取单元格的值出现异常,SHEET:")
            .append(cell.getSheet().getSheetName())
            .append(",Row:").append(cell.getRowIndex() + 1)
            .append(",Column:")
            .append(cell.getColumnIndex() + 1).toString(), e);
            }
            if (cellValue != null) // 对单元格值取TRIM
            cellValue = cellValue.trim();
            return cellValue;
            }
            //不谢


            IP属地:北京6楼2014-10-28 11:54
            收起回复
              先取出这个cell对象判断是否为空,再判断有没有值


              IP属地:广东来自Android客户端7楼2014-10-28 12:12
              回复