public static String getCellValue(HSSFCell hssfCell){
if(hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN){
return String.valueOf(hssfCell.getBooleanCellValue());
}else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC){
if(HSSFDateUtil.isCellDateFormatted(hssfCell)){
Date d = hssfCell.getDateCellValue();
SimpleDateFormat simpl = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String st = simpl.format(d);
if(st.endsWith(" 00:00:00")) st = st.replace(" 00:00:00", "");
return st;
}
if(hssfCell.getCellStyle().getDataFormat() == 177){//当EXCEL设置为日期格式(年月)时,上面判断无法生效,此特殊处理.
Date d = hssfCell.getDateCellValue();
SimpleDateFormat simpl = new SimpleDateFormat("yyyy年MM月");
String st = simpl.format(d);
if(st.endsWith(" 00:00:00")) st = st.replace(" 00:00:00", "");
return st;
}
double vl = hssfCell.getNumericCellValue();
if(String.valueOf(vl).endsWith(".0")){
return String.valueOf(vl).replace(".0", "");
}
return String.valueOf(hssfCell.getNumericCellValue());
}else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_FORMULA){ //公式
try{
if(HSSFDateUtil.isCellDateFormatted(hssfCell)){
Date d = hssfCell.getDateCellValue();
SimpleDateFormat simpl = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String st = simpl.format(d);
if(st.endsWith(" 00:00:00")) st = st.replace(" 00:00:00", "");
return st;
}
return String.valueOf(hssfCell.getNumericCellValue());
}catch(IllegalStateException e){
try{
double vl = hssfCell.getNumericCellValue();
if(String.valueOf(vl).endsWith(".0")){
return String.valueOf(vl).replace(".0", "");
}
return String.valueOf(hssfCell.getNumericCellValue());
}catch(IllegalStateException el){
try{
return String.valueOf(hssfCell.getRichStringCellValue());
}catch(IllegalStateException ell){
return String.valueOf(hssfCell.getBooleanCellValue());
}
}
}
}else{
return String.valueOf(hssfCell.getStringCellValue());
}
}
同事给的,先留着备用。用于解决从excel表获取时间数据时由于格式而出现的问题,例如2015/6/1,持久化到数据库后变成0015……
用DateUtil.formatDate(tbPayRentTemp.getEndDate(), DateUtil.YYYYMMFORMAT)来获取时间要求格式是2015-11-26,且单元格格式为文本,可以获取到正确的数据,但格式要求较严格。