处理#REF!来自excel的细胞使用apache poi

时间:2018-04-17 13:58:54

标签: java excel apache-poi xssf

我需要处理#REF!来自我的excel的单元格,我从哪里得到#REF!我需要将0或空引号返回到数据结构。 我试过这样做,但我不能成功,这里是片段: -

if (valueCell.getCellType() == Cell.CELL_TYPE_FORMULA) {
                if (valueCell.getCellStyle().getDataFormatString().contains("%")) {
                    // Detect Percent Values
                      values.put(valueHeader, String.valueOf(Double.valueOf(valueCell.getNumericCellValue() * 100).intValue()) + "%");

                }else if (valueCell.getCellType() == Cell.CELL_TYPE_ERROR) {
                    values.put(valueHeader,"");
                } else {
                      values.put(valueHeader,String.valueOf(valueCell.getNumericCellValue()));

                }
            }

如果有条件,那就不会进入其他方面。它抛出

  

无法从STRING单元格获取NUMERIC值

请帮助我。

1 个答案:

答案 0 :(得分:1)

这对我有用!

if (valueCell.getCellType() == Cell.CELL_TYPE_FORMULA) {
                switch (valueCell.getCachedFormulaResultTypeEnum()) {
                   case STRING:
                       values.put(valueHeader,"");
                       break;
                      case NUMERIC:
                          if (valueCell.getCellStyle().getDataFormatString().contains("%")) {
                                // Detect Percent Values
                                  values.put(valueHeader, String.valueOf(Double.valueOf(valueCell.getNumericCellValue() * 100).intValue()) + "%");

                            }else{
                          values.put(valueHeader,String.valueOf(valueCell.getNumericCellValue()));
                            }
                       break;
                      case ERROR:
                          values.put(valueHeader,"");
                       break;
                      default:
                       System.out.println("default"); //should never occur
                     }
                     }

其中values是为数据结构定义的对象。