POI Excel 사용자 정의 날짜 형식 읽기 (인스턴스 코드)

POI로 Excel 데이터 읽기: (버전 번호: POI3.7)
1. Excel 읽기

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 데이터 처리:
Excel 저장 날짜, 시간은 모두 수치 형식으로 저장되며, 읽을 때 POI가 먼저 수치 유형인지 아닌지를 판단하고 전환한다
1. 수치 형식(CELL_TYPE_NUMERIC):
1. 순수 수치 형식: getNumericCellValue() 직접 데이터 가져오기
2. 날짜 형식: yyy-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. 사용자 정의 날짜 형식: yyy년 m월 d일, h시 mm분, yyy년 m월 등 문자를 포함하는 날짜 형식 처리
셀을 판단합니다.getCellStyle().getDataFormat() 값, 확인 값 형식
yyyy년 m월 d일 --->31
월 d일 --->58
h시 mm분--->32
2, 문자 형식(CELL_TYPE_STRING): 컨텐츠 직접 가져오기
 

private String parseExcel(Cell cell) { 
    String result = new String(); 
    switch (cell.getCellType()) { 
    case HSSFCell.CELL_TYPE_NUMERIC://   
      if (HSSFDateUtil.isCellDateFormatted(cell)) {//  、  
        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(); 
        //   
        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
년 m 월 d 일 ---31
yyyy년m월-----57
월 d 일
HH:mm----------- 20
h시mm분-------32
 

//1、  
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) { 
    //  
    sdf = new SimpleDateFormat("HH:mm"); 
  } 
  double value = cell.getNumericCellValue(); 
  Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value); 
  result = sdf.format(date); 
} 
이상의 POI가 Excel 사용자 정의 날짜 형식에 대한 읽기 (실례 코드) 는 여러분께 공유한 모든 내용입니다. 참고 부탁드리고 많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기