/**POI中Excel文件单元格的类型
在读取每一个单元格的值的时候,通过getCellType方法获得当前单元格的类型,在Excel中单元格有6种类型,如下所示。
1)CELL_TYPE_BLANK:空值
2)CELL_TYPE_BOOLEAN:布尔型
3)CELL_TYPE_ERROR: 错误
4)CELL_TYPE_FORMULA:公式型一般模板中没有
5)CELL_TYPE_STRING:字符串型
6)CELL_TYPE_NUMERIC:数值型
如果单元格的Type为CELL_TYPE_NUMERIC时,还需要进一步判断该单元格的数据格式,因为它有可能是Date类型,在Excel中的Date类型也是以Double类型的数字存储的。Excel中的Date表示当前时间与1900年1月1日相隔的天数,所以需要调用HSSFDateUtil的isCellDateFormatted方法,判断该单元格的数据格式是否是Excel Date类型。如果是,则调用getDateCellValue方法,返回一个Java类型的Date。
因此读取Excel中单元格中的数据时,得判断单元格格式类型,这是我写的,参考一下:
*
*/
private static String dogetCell(Cell cell) {
String temp = "";
if (cell == null) {
return temp;
}
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
return cell.getRichStringCellValue().getString();
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
temp = df.format(date);
} else {
return String.valueOf(cell.getNumericCellValue());
}
case Cell.CELL_TYPE_FORMULA:
cell.setCellType(Cell.CELL_TYPE_STRING);
return cell.getStringCellValue();
default:
return temp;
} }
系统中有的都是这么写的
建议改成先判断cell是什么类型的在取值
错误写法:此方法是有些系统中获取excel中日期然后进行日期格式转换的方法
public static String dateFromExcel(Cell cell,ActionErrors errors) throws ParseException{
Date date = null;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String retDate = "";//没有判断单元格格式直接取值,会报错
if(cell.getStringCellValue().trim().equals("")){
return null;
}
//是否日期格式
if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC||cell.getCellType() ==Cell.CELL_TYPE_FORMULA ){
if(org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)){
double d = cell.getNumericCellValue();
date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(d);
}
}else{
cell.setCellType(Cell.CELL_TYPE_STRING);
retDate = cell.getStringCellValue().trim();
String[] monthStr;
if(retDate.indexOf("/")>0){
monthStr = retDate.split("/");
}else{
monthStr = retDate.split("-");
}
String year = monthStr[0];
String month = monthStr[1];
String day = monthStr[2];
if (month.length() == 1) {
month = "0" + month;
}
if (day.length() == 1) {
day = "0" + day;
}
retDate = year + "-" + month+"-"+day;
date = df.parse(retDate);
}
df.setLenient(false);
if(date == null){
logger.debug("日期格式不正确");
errors.add("save", new ActionError("message.failer", "日期格式不正确!"));
}
retDate = df.format(date);
return retDate;
}