poi解析Excel,格式化日期型別
阿新 • • 發佈:2019-01-23
/** * 解析excel * * @param fileName */ public void parseExcelFile(String fileName) { // String fileName = System.getProperty("user.dir") + // "\\resources\\excelParse.xlsx"; InputStream in = null; try { in = new FileInputStream(fileName); XSSFWorkbook workBook = new XSSFWorkbook(in); int sheetNum = workBook.getNumberOfSheets(); XSSFSheet sheet = workBook.getSheetAt(sheetNum); sheetNum--; int rowNum = sheet.getLastRowNum(); if (rowNum > 0) { for (int i = 0; i < rowNum; i++) { XSSFRow row = sheet.getRow(rowNum); if (row != null) { int cellNum = row.getLastCellNum(); for (int j = 0; j < cellNum; j++) { XSSFCell cell = row.getCell(cellNum); String cellValue = getCellValue(cell); } } } } } catch (Exception e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 獲取單元格的值 * * @param hcell * @return */ private String getCellValue(XSSFCell hcell) { String value = null; if (null != hcell) { switch (hcell.getCellType()) { // 單元格是函式計算出來的資料 case HSSFCell.CELL_TYPE_FORMULA: try { value = String.valueOf(hcell.getNumericCellValue()); } catch (Exception e) { value = String.valueOf(hcell.getRichStringCellValue()); } break; // 單元格是數字型別的 case HSSFCell.CELL_TYPE_NUMERIC: // 獲取單元格的樣式值,即獲取單元格格式對應的數值 int style = hcell.getCellStyle().getDataFormat(); // 判斷是否是日期格式 if (HSSFDateUtil.isCellDateFormatted(hcell)) { Date date = hcell.getDateCellValue(); // 對不同格式的日期型別做不同的輸出,與單元格格式保持一致 switch (style) { case 178: value = new SimpleDateFormat("yyyy'年'M'月'd'日'").format(date); break; case 14: value = new SimpleDateFormat("yyyy/MM/dd").format(date); break; case 179: value = new SimpleDateFormat("yyyy/MM/dd HH:mm").format(date); break; case 181: value = new SimpleDateFormat("yyyy/MM/dd HH:mm a ").format(date); break; case 22: value = new SimpleDateFormat(" yyyy/MM/dd HH:mm:ss ").format(date); break; default: break; } } else { switch (style) { // 單元格格式為百分比,不格式化會直接以小數輸出 case 9: value = new DecimalFormat("0.00%").format(hcell .getNumericCellValue()); break; // DateUtil判斷其不是日期格式,在這裡也可以設定其輸出型別 case 57: value = new SimpleDateFormat(" yyyy'年'MM'月' ").format(hcell.getDateCellValue()); break; default: value = String.valueOf(hcell.getNumericCellValue()); break; } } break; // 單元格是字串型別的 case HSSFCell.CELL_TYPE_STRING: value = String.valueOf(hcell.getRichStringCellValue()); break; } } return value; }
1、這個解析的是07版的excel,03版的類似,只不過物件不一樣,03版的是HSSF*。
2、這裡只對單元格是否是函式、數字、字串型別做了判斷,還有boolean等型別。單元格的每一個格式都有一個樣式值與其對應,這樣就可以使輸出的格式與單元格的格式一致啦。
3、對日期做格式化的時候,要寫對標記,我之前寫的月份是mm,連26月都出來了,換成MM就可以啦。4、excel中還有一種日期格式是“二〇〇一年三月十四日”,還沒弄出來怎麼格式化出來。