日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POI对Excel自定义日期格式的读取

發(fā)布時(shí)間:2024/4/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POI对Excel自定义日期格式的读取 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用POI讀取Excel數(shù)據(jù):(版本號:POI3.7)

1、讀取Excel

Java代碼??
  • private?List<String[]>?rosolveFile(InputStream?is,?String?suffix,??
  • ????????????int?startRow)?throws?IOException,?FileNotFoundException?{??
  • ????????Workbook?xssfWorkbook?=?null;??
  • ????????if?("xls".equals(suffix))?{??
  • ????????????xssfWorkbook?=?new?HSSFWorkbook(is);??
  • ????????}?else?if?("xlsx".equals(suffix))?{??
  • ????????????xssfWorkbook?=?new?XSSFWorkbook(is);??
  • ????????}??
  • ????????Sheet?xssfSheet?=?xssfWorkbook.getSheetAt(0);??
  • ????????if?(xssfSheet?==?null)?{??
  • ????????????return?null;??
  • ????????}??
  • ????????ArrayList<String[]>?list?=?new?ArrayList<String[]>();??
  • ????????int?lastRowNum?=?xssfSheet.getLastRowNum();??
  • ????????for?(int?rowNum?=?startRow;?rowNum?<=?lastRowNum;?rowNum++)?{??
  • ????????????if?(xssfSheet.getRow(rowNum)?!=?null)?{??
  • ????????????????Row?xssfRow?=?xssfSheet.getRow(rowNum);??
  • ????????????????short?firstCellNum?=?xssfRow.getFirstCellNum();??
  • ????????????????short?lastCellNum?=?xssfRow.getLastCellNum();??
  • ????????????????if?(firstCellNum?!=?lastCellNum)?{??
  • ????????????????????String[]?values?=?new?String[lastCellNum];??
  • ????????????????????for?(int?cellNum?=?firstCellNum;?cellNum?<?lastCellNum;?cellNum++)?{??
  • ????????????????????????Cell?xssfCell?=?xssfRow.getCell(cellNum);??
  • ????????????????????????if?(xssfCell?==?null)?{??
  • ????????????????????????????values[cellNum]?=?"";??
  • ????????????????????????}?else?{??
  • ????????????????????????????values[cellNum]?=?parseExcel(xssfCell);??
  • ????????????????????????}??
  • ????????????????????}??
  • ????????????????????list.add(values);??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ????????return?list;??
  • ????}??
  • ?

    ?2、Excel數(shù)據(jù)處理:

    Excel存儲日期、時(shí)間均以數(shù)值類型進(jìn)行存儲,讀取時(shí)POI先判斷是是否是數(shù)值類型,再進(jìn)行判斷轉(zhuǎn)化

    1、數(shù)值格式(CELL_TYPE_NUMERIC):

    1.純數(shù)值格式:getNumericCellValue() 直接獲取數(shù)據(jù)

    2.日期格式處理yyyy-MM-dd, d/m/yyyy h:mm,?HH:mm?等不含文字的日期格式

    1).判斷是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell)

    2).判斷是日期或者時(shí)間

    cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")

    OR: cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("yyyy-MM-dd")

    3.自定義日期格式處理yyyy年m月d日,h時(shí)mm分,yyyy年m月等含文字的日期格式

    判斷cell.getCellStyle().getDataFormat()值,解析數(shù)值格式

    yyyy年m月d日----->31

    m月d日---->58

    h時(shí)mm分--->32

    2、字符格式(CELL_TYPE_STRING):直接獲取內(nèi)容

    ?

    Java代碼??
  • private?String?parseExcel(Cell?cell)?{??
  • ????????String?result?=?new?String();??
  • ????????switch?(cell.getCellType())?{??
  • ????????case?HSSFCell.CELL_TYPE_NUMERIC://?數(shù)字類型??
  • ????????????if?(HSSFDateUtil.isCellDateFormatted(cell))?{//?處理日期格式、時(shí)間格式??
  • ????????????????SimpleDateFormat?sdf?=?null;??
  • ????????????????if?(cell.getCellStyle().getDataFormat()?==?HSSFDataFormat??
  • ????????????????????????.getBuiltinFormat("h:mm"))?{??
  • ????????????????????sdf?=?new?SimpleDateFormat("HH:mm");??
  • ????????????????}?else?{//?日期??
  • ????????????????????sdf?=?new?SimpleDateFormat("yyyy-MM-dd");??
  • ????????????????}??
  • ????????????????Date?date?=?cell.getDateCellValue();??
  • ????????????????result?=?sdf.format(date);??
  • ????????????}?else?if?(cell.getCellStyle().getDataFormat()?==?58)?{??
  • ????????????????//?處理自定義日期格式:m月d日(通過判斷單元格的格式id解決,id的值是58)??
  • ????????????????SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy-MM-dd");??
  • ????????????????double?value?=?cell.getNumericCellValue();??
  • ????????????????Date?date?=?org.apache.poi.ss.usermodel.DateUtil??
  • ????????????????????????.getJavaDate(value);??
  • ????????????????result?=?sdf.format(date);??
  • ????????????}?else?{??
  • ????????????????double?value?=?cell.getNumericCellValue();??
  • ????????????????CellStyle?style?=?cell.getCellStyle();??
  • ????????????????DecimalFormat?format?=?new?DecimalFormat();??
  • ????????????????String?temp?=?style.getDataFormatString();??
  • ????????????????//?單元格設(shè)置成常規(guī)??
  • ????????????????if?(temp.equals("General"))?{??
  • ????????????????????format.applyPattern("#");??
  • ????????????????}??
  • ????????????????result?=?format.format(value);??
  • ????????????}??
  • ????????????break;??
  • ????????case?HSSFCell.CELL_TYPE_STRING://?String類型??
  • ????????????result?=?cell.getRichStringCellValue().toString();??
  • ????????????break;??
  • ????????case?HSSFCell.CELL_TYPE_BLANK:??
  • ????????????result?=?"";??
  • ????????default:??
  • ????????????result?=?"";??
  • ????????????break;??
  • ????????}??
  • ????????return?result;??
  • ????}??
  • ?

    ?*萬能處理方案

    所有日期格式都可以通過getDataFormat()值來判斷

    yyyy-MM-dd----- 14

    yyyy年m月d日--- 31

    yyyy年m月------- 57

    m月d日 ?---------- 58

    HH:mm----------- 20

    h時(shí)mm分 ?------- 32

    ?

    Java代碼??
  • //1、判斷是否是數(shù)值格式??
  • if(cell.getCellType()?==?HSSFCell.CELL_TYPE_NUMERIC){??
  • ????short?format?=?cell.getCellStyle().getDataFormat();??
  • ????SimpleDateFormat?sdf?=?null;??
  • ????if(format?==?14?||?format?==?31?||?format?==?57?||?format?==?58){??
  • ????????//日期??
  • ????????sdf?=?new?SimpleDateFormat("yyyy-MM-dd");??
  • ????}else?if?(format?==?20?||?format?==?32)?{??
  • ????????//時(shí)間??
  • ????????sdf?=?new?SimpleDateFormat("HH:mm");??
  • ????}??
  • ????double?value?=?cell.getNumericCellValue();??
  • ????Date?date?=?org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);??
  • ????result?=?sdf.format(date);??
  • }??
  • ?

    總結(jié)

    以上是生活随笔為你收集整理的POI对Excel自定义日期格式的读取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。