새 POI 가 져 오기 날짜 형식 cell 값 프로 세 스 도해
POI 는 셀 날짜 에 대한 처리 가 약 하고 대상 이 없 는 유형 이 며 날짜 유형 도 double 값 이기 때문에 같은 수치 유형 으로 합 니 다.cell.setCellType(CellType.STRING)을 사용 하 더 라 도 숫자 를 되 돌려 줍 니 다.
인터넷 의 대부분 방법 은:
cell.getCellType()
그러나 새 판 POI 에서 예 를 들 어 3.15 판 은 이미 사용 을 포기 했다.프로젝트 가 필요 하기 때문에 jar 가방 을 조정 할 수 없 기 때문에 억지로 해결 할 수 밖 에 없다.
나중에 한 가지 방법 을 발견 했다.
cell.getCellStyle().getDataFormattString()은 셀 의 형식 유형 을 판단 할 수 있 습 니 다.다음 그림 입 니 다.
그래서 다음 과 같은 방법 으로 판단 할 수 있다.
if("yyyy/mm;@".equals(cell.getCellStyle().getDataFormatString()) || "m/d/yy".equals(cell.getCellStyle().getDataFormatString())
|| "yy/m/d".equals(cell.getCellStyle().getDataFormatString()) || "mm/dd/yy".equals(cell.getCellStyle().getDataFormatString())
|| "dd-mmm-yy".equals(cell.getCellStyle().getDataFormatString())|| "yyyy/m/d".equals(cell.getCellStyle().getDataFormatString())){
return new SimpleDateFormat("yyyy/MM/dd").format(cell.getDateCellValue());
}
이 방법 으로 판단 하 는 형식 은 한계 가 있 으 며,셀 형식 을 한정 할 수 있다 면 충분히 해결 할 수 있다.하지만 제 프로젝트 는 엑셀 의 날짜 형식 도 고정 되 지 않 고 다른 길 을 찾 아야 합 니 다.
디 버 깅 을 할 때 분명히 이 cell 의 값 이 표시 되 어 있 는 날 짜 였 다.
위의 그림 과 같이 이 날짜[31-1 월-2005]는 이 cell 아래 의 특정한 요소 에 있 지 않 습 니 다.적어도 저 는 오랫동안 찾 았 지만 찾 지 못 했 습 니 다.cell.toString()으로 만 받 을 수 있 습 니 다.
마지막 으로 제 해결 방법 은 cell.getCellStyle().getDataFormattString()을 사용 하여 판단 하고 얻 을 수 있 으 면"yyy/MM/dd"형식의 날 짜 를 되 돌려 주 는 것 입 니 다.얻 지 못 하면 마지막 으로 cell.toString()으로 돌아 갑 니 다.이렇게 하면 적어도 하나의 숫자 를 되 돌려 주지 않 을 것 이 고,다른 유형의 단원 격 에 영향 을 미 칠 지 모 르 지만,현재 몇 장의 시 계 를 뛰 어 다 녔 지만 잘못 보고 하지 않 았 다.
이런 해결 방법 은 당연히 좋 지 않 습 니 다.분명 좋 은 방법 이 있 을 것 입 니 다.제 가 찾 지 못 했 을 것 입 니 다.만약 에 어떤 협객 이 찾 았 다 면 말씀 해 주 십시오.감사합니다.
마지막 까지 역시 나 를 귀 찮 게 했 어.[31-1 월-2005]격식 이 안 돼.'yyy/MM/dd'격식 으로 바 꿔 야 돼.
그리고 정규 표현 식 을 쓰 지 않 고 문자열 을 판단 하 는 방식 으로 날짜 형식 을 판단 하려 고 합 니 다.아버 지 를 속 였 으 니 바로 쓸 줄 모른다.....................................................간단 하 다 고 생각 했 는데 틀 렸 어.
그리고 잔 머리 를 굴 려 자바 의 문자열 로 조금씩 나 누 어 판단 하고 코드 를 먼저 넣 는 것 으로 바 꾸 었 습 니 다.
/**
*
*
* @param cell
* @return
*/
public static String convertCellToString(Cell cell){
// null ,
if (cell == null)
return "";
//POI , , double ,
// 2006/11/02 ,POI “02- -2006”
if(cell.toString().contains("-") && checkDate(cell.toString())){
String ans = "";
try {
ans = new SimpleDateFormat("yyyy/MM/dd").format(cell.getDateCellValue());
} catch (Exception e) {
ans = cell.toString();
}
return ans;
}
cell.setCellType(CellType.STRING);
return cell.getStringCellValue();
}
/**
* “02- -2006”
*/
private static boolean checkDate(String str){
String[] dataArr =str.split("-");
try {
if(dataArr.length == 3){
int x = Integer.parseInt(dataArr[0]);
String y = dataArr[1];
int z = Integer.parseInt(dataArr[2]);
if(x>0 && x<32 && z>0 && z< 10000 && y.endsWith(" ")){
return true;
}
}
} catch (Exception e) {
return false;
}
return false;
}
학생 들 은 천천히 이해 하 세 요.코드 가 조금 좌절 되 었 지만 정확 하 다 고 보장 할 수 는 없 지만 적어도 이런 상황 에서 사용 할 수 있 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spring mvc를 사용하여 Excel 다운로드//인쇄 버튼 (value = "", params = "print", method = RequestMethod.POST) public String print (HttpServletResponse response,Wo...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.