今天用poi做导入;遇到3个问题;总结一下
1. 读取单元格内容为数字时报异常
原因:使用cell.getStringCellValue()读取单元格内容,内容是数字不是字符串,出现异常
解决办法:将单元格内容设置为字符串
cell.setCellType(Cell.CELL_TYPE_STRING);
2. 读取时间时,解析异常 出现数字
public static Date getCellTime(Cell cell) {
// 判断是否是数值格式
if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
short format = cell.getCellStyle().getDataFormat();
// 判断日期个格式是否是 2017/01/01 这样
/*
* 14 yyyy-MM-dd / 2017/01/01 31 yyyy年m月d日
*/
if (format == 14 || format == 31) {
Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
return date;
}
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { // 判断是否是字符串
String ss = cell.getStringCellValue();
SimpleDateFormat sdf =null;
if (ss != null && !ss.equals("")) {
if(ss.contains("-")){
sdf=new SimpleDateFormat("yyyy-MM-dd");
}else if(ss.contains("/")){
sdf=new SimpleDateFormat("yyyy/MM/dd");
}
Date date = null;
try {
date = sdf.parse(ss);
} catch (Exception e) {
}
return date;
}
return null;
}
return null;
}
3.导出单元格为时间,单元格内容是一个数字,不是期望的时间格式
这是因为Excel将时间转成从1990年1月1日到现在的天数了;
解决办法:将时间类型改成字符串导出
/**
* 格式化时间为字符串
* 输出的时间格式可自己调
* @param date
* @return
*/
public static String getFormatTime(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String time= sdf.format(date);
return time;
}
将内容设置为单元格内容
row2.createCell(6).setCellValue(getFormatTime(new Date()));;