【问题标题】:Handle #REF! cell from excel using apache poi处理#REF!使用 apache poi 的 excel 单元格
【发布时间】:2018-05-03 23:25:55
【问题描述】:

我需要处理#REF!我的excel中的单元格,我在哪里得到#REF!我需要向数据结构返回 0 或空引号。 我试过这样做,但我无法成功,这里是 sn-p:-

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()));

                }
            }

它不会进入 else if 条件。它抛出

无法从 STRING 单元格中获取 NUMERIC 值

请帮帮我。

【问题讨论】:

  • 为什么不在excel的单元格中使用ifferror(),然后再从外部调用它?
  • @Solar Mike 我无法编辑作为输入的 excel 文件。
  • 如果你有这个文件,你可以复制它:只需使用 =IFERROR(A1,0) 并将它拖到你需要的宽度和高度。
  • 那为什么要用excel标记这个问题呢?这不是一个excel问题,但你可以考虑让文件的生产者来做。
  • “它不会进入 else if 条件。”为什么要呢?如果单元格包含公式并且此公式导致错误,则数据格式字符串不会更改。您可以在这里尝试我的回答中的方法:stackoverflow.com/questions/45325694/….

标签: java excel apache-poi xssf


【解决方案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 是为数据结构定义的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多