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自定义日期格式的读取(实例代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。