POI使用
Idea工具 使用从Maven导入获得 poi3.17 jar包
如果是 1.8的jdk 请使用 4以下的版本。官网上明确标注 4 以上移除了 对 jdk 1.7以下的支持
解析公式 如果使用 FormulaEvalute 也可以,亲测500行33列Excel 全是公式的 会特别慢。(30秒)
硬解决思路: 获得非法异常,通过信息判断是什么类型的值。速度可以说是秒出;
单元格是 #N/A! 的 则是 公式计算不出值的。
/* * 传入单元格 * * @param cell * @return */ private String operateCellFormatter(Cell cell) { String rv = ""; if (cell == null) { return rv; } switch (cell.getCellTypeEnum()) { //如果该excel是公式 case FORMULA: try { rv = String.valueOf(cell.getNumericCellValue()); } catch (IllegalStateException e) { if (e.getMessage().indexOf("from a STRING cell") != -1) { rv = String.valueOf(cell.getStringCellValue()); } else if (e.getMessage().indexOf("from a ERROR formula cell") != -1) { rv = String.valueOf(cell.getErrorCellValue()); } } catch (Exception e) { logger.error(e); } break; //如果该excel是字符串 case STRING: rv = String.valueOf(cell); break; //如果是double型 case NUMERIC: rv = String.valueOf(cell.getNumericCellValue()); break; //如果是空格 case BLANK: break; //如果是布尔类型 case BOOLEAN: rv = String.valueOf(cell.getBooleanCellValue()); break; case _NONE: rv = "单元格:EXCEPTION:NONE,该表EXCEL数据需要核对"; break; case ERROR: rv = "单元格:EXCEPTION:ERROR,该表EXCEL数据需要核对"; break; } return rv; }