java poi 设置时间空间_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----- 14yyyy年m月d日--- 31yyyy年m月------- 57m月d日---------- 58HH:mm----------- 20h时mm分------- 32

接下来是针对excel各种数据类型来进入转换,基本涵盖所需要的,如果没有你需要的,可以在此基础上添加

//获取单元格各类型值,返回字符串类型

public staticString 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= newBigDecimal(cell.getNumericCellValue());

cellValue= bd.toPlainString();//数值 这种用BigDecimal包装再获取plainString,可以防止获取到科学计数值

}break;case Cell.CELL_TYPE_STRING: //字符串

cellValue =cell.getStringCellValue();break;case Cell.CELL_TYPE_BOOLEAN: //Boolean

cellValue = 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;

}returncellValue;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值