java通过poi读取excel中的日期类型数据或自定义类型日期
Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2019,而Excel中输入的是 2019/10/12 或 2019-10-12
poi处理excel时,当excel没有明确指明是哪个类型的数据时,poi很可能处理单元格的日期数据时就有可能是一串数字,而使用java程序基本无法转换。
为了解决以上的问题,本人收集了各种资料,目前来总结一下,供碰到此类问题的你作参考。
Excel数据处理:
Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化
1、数值格式(CELL_TYPE_NUMERIC):
1.纯数值格式:getNumericCellValue() 直接获取数据
2.日期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式
1).判断是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell)
所有日期格式都可以通过getDataFormat()值来判断
yyyy-MM-dd----- 14 yyyy年m月d日--- 31 yyyy年m月------- 57 m月d日 ---------- 58 HH:mm----------- 20 h时mm分 ------- 32
接下来是针对excel各种数据类型来进入转换,基本涵盖所需要的,如果没有你需要的,可以在此基础上添加
//获取单元格各类型值,返回字符串类型public static String getCellValueByCell(Cell cell) {//判断是否为null或空串if (cell==null || cell.toString().trim().equals("")) {return "";}String cellValue = "";int cellType=cell.getCellType();switch (cellType) {case Cell.CELL_TYPE_NUMERIC: // 数字short format = cell.getCellStyle().getDataFormat();if (DateUtil.isCellDateFormatted(cell)) {SimpleDateFormat sdf = null; //System.out.println("cell.getCellStyle().getDataFormat()="+cell.getCellStyle().getDataFormat());if (format == 20 || format == 32) { sdf = new SimpleDateFormat("HH:mm"); } else if (format == 14 || format == 31 || format == 57 || format == 58) { // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58) sdf = new SimpleDateFormat("yyyy-MM-dd"); double value = cell.getNumericCellValue(); Date date = org.apache.poi.ss.usermodel.DateUtil .getJavaDate(value); cellValue = sdf.format(date); }else {// 日期 sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } try {cellValue = sdf.format(cell.getDateCellValue());// 日期} catch (Exception e) {try {throw new Exception("exception on get date data !".concat(e.toString()));} catch (Exception e1) {e1.printStackTrace();}}finally{sdf = null;}} else {BigDecimal bd = new BigDecimal(cell.getNumericCellValue()); cellValue = bd.toPlainString();// 数值 这种用BigDecimal包装再获取plainString,可以防止获取到科学计数值}break;case Cell.CELL_TYPE_STRING: // 字符串cellValue = cell.getStringCellValue();break;case Cell.CELL_TYPE_BOOLEAN: // BooleancellValue = cell.getBooleanCellValue()+"";;break;case Cell.CELL_TYPE_FORMULA: // 公式cellValue = cell.getCellFormula();break;case Cell.CELL_TYPE_BLANK: // 空值cellValue = "";break;case Cell.CELL_TYPE_ERROR: // 故障cellValue = "ERROR VALUE";break;default:cellValue = "UNKNOW VALUE";break;}return cellValue;}
每天学习一点点,你就进步一点点。