POI对Excel自定义日期格式的读取(实例代码)
用POI读取Excel数据:(版本号:POI3.7)
1、读取Excel
privateList<String[]>rosolveFile(InputStreamis,Stringsuffix,
intstartRow)throwsIOException,FileNotFoundException{
WorkbookxssfWorkbook=null;
if("xls".equals(suffix)){
xssfWorkbook=newHSSFWorkbook(is);
}elseif("xlsx".equals(suffix)){
xssfWorkbook=newXSSFWorkbook(is);
}
SheetxssfSheet=xssfWorkbook.getSheetAt(0);
if(xssfSheet==null){
returnnull;
}
ArrayList<String[]>list=newArrayList<String[]>();
intlastRowNum=xssfSheet.getLastRowNum();
for(introwNum=startRow;rowNum<=lastRowNum;rowNum++){
if(xssfSheet.getRow(rowNum)!=null){
RowxssfRow=xssfSheet.getRow(rowNum);
shortfirstCellNum=xssfRow.getFirstCellNum();
shortlastCellNum=xssfRow.getLastCellNum();
if(firstCellNum!=lastCellNum){
String[]values=newString[lastCellNum];
for(intcellNum=firstCellNum;cellNum<lastCellNum;cellNum++){
CellxssfCell=xssfRow.getCell(cellNum);
if(xssfCell==null){
values[cellNum]="";
}else{
values[cellNum]=parseExcel(xssfCell);
}
}
list.add(values);
}
}
}
returnlist;
}
2、Excel数据处理:
Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化
1、数值格式(CELL_TYPE_NUMERIC):
1.纯数值格式:getNumericCellValue()直接获取数据
2.日期格式:处理yyyy-MM-dd,d/m/yyyyh:mm,HH:mm等不含文字的日期格式
1).判断是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell)
2).判断是日期或者时间
cell.getCellStyle().getDataFormat()==HSSFDataFormat.getBuiltinFormat("h:mm")
OR:cell.getCellStyle().getDataFormat()==HSSFDataFormat.getBuiltinFormat("yyyy-MM-dd")
3.自定义日期格式:处理yyyy年m月d日,h时mm分,yyyy年m月等含文字的日期格式
判断cell.getCellStyle().getDataFormat()值,解析数值格式
yyyy年m月d日----->31
m月d日---->58
h时mm分--->32
2、字符格式(CELL_TYPE_STRING):直接获取内容
privateStringparseExcel(Cellcell){
Stringresult=newString();
switch(cell.getCellType()){
caseHSSFCell.CELL_TYPE_NUMERIC://数字类型
if(HSSFDateUtil.isCellDateFormatted(cell)){//处理日期格式、时间格式
SimpleDateFormatsdf=null;
if(cell.getCellStyle().getDataFormat()==HSSFDataFormat
.getBuiltinFormat("h:mm")){
sdf=newSimpleDateFormat("HH:mm");
}else{//日期
sdf=newSimpleDateFormat("yyyy-MM-dd");
}
Datedate=cell.getDateCellValue();
result=sdf.format(date);
}elseif(cell.getCellStyle().getDataFormat()==58){
//处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
doublevalue=cell.getNumericCellValue();
Datedate=org.apache.poi.ss.usermodel.DateUtil
.getJavaDate(value);
result=sdf.format(date);
}else{
doublevalue=cell.getNumericCellValue();
CellStylestyle=cell.getCellStyle();
DecimalFormatformat=newDecimalFormat();
Stringtemp=style.getDataFormatString();
//单元格设置成常规
if(temp.equals("General")){
format.applyPattern("#");
}
result=format.format(value);
}
break;
caseHSSFCell.CELL_TYPE_STRING://String类型
result=cell.getRichStringCellValue().toString();
break;
caseHSSFCell.CELL_TYPE_BLANK:
result="";
default:
result="";
break;
}
returnresult;
}
*万能处理方案:
所有日期格式都可以通过getDataFormat()值来判断
yyyy-MM-dd-----14
yyyy年m月d日---31
yyyy年m月-------57
m月d日 ----------58
HH:mm-----------20
h时mm分 -------32
//1、判断是否是数值格式
if(cell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC){
shortformat=cell.getCellStyle().getDataFormat();
SimpleDateFormatsdf=null;
if(format==14||format==31||format==57||format==58){
//日期
sdf=newSimpleDateFormat("yyyy-MM-dd");
}elseif(format==20||format==32){
//时间
sdf=newSimpleDateFormat("HH:mm");
}
doublevalue=cell.getNumericCellValue();
Datedate=org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
result=sdf.format(date);
}
以上这篇POI对Excel自定义日期格式的读取(实例代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。