关于 poi 读取excel 文件 解决2件事情
1. 直接用 new WoorkBook 读取excel 可以兼容 xlsx
InputStream fileIn = null; Workbook wb; fileIn = file.getInputStream(); wb = WorkbookFactory.create(fileIn);
2.关于读取excel 值的问题 特别是 number类型的 读取要注意 ,我本来设置了文本类型,用户使用的时候 单元格复制过去的 直接修改了单元格格式,数字类型读出来就有问题
/** * 获取当前单元格内容 */ private static String getCellValue(Cell cell) { String value = ""; if (cell != null) { switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { // 日期类型 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); value = sdf.format(date); } else { BigDecimal data = new BigDecimal(String.valueOf(cell.getNumericCellValue())); value = data.stripTrailingZeros().toPlainString(); } break; case Cell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case Cell.CELL_TYPE_BOOLEAN: Boolean data = cell.getBooleanCellValue(); value = data.toString(); break; case Cell.CELL_TYPE_ERROR: // System.out.println("单元格内容出现错误"); break; case Cell.CELL_TYPE_FORMULA: value = String.valueOf(cell.getNumericCellValue()); if (value.equals("NaN")) {// 如果获取的数据值非法,就将其装换为对应的字符串 value = cell.getStringCellValue().toString(); } break; case Cell.CELL_TYPE_BLANK: value = ""; break; default: value = ""; break; } } return value; }