POI Excel 사용자 정의 날짜 형식 읽기 (인스턴스 코드)
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 사용자 정의 날짜 형식에 대한 읽기 (실례 코드) 는 여러분께 공유한 모든 내용입니다. 참고 부탁드리고 많은 응원 부탁드립니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
POI Excel 사용자 정의 날짜 형식 읽기 (인스턴스 코드)POI로 Excel 데이터 읽기: (버전 번호: POI3.7) 1. Excel 읽기 2, Excel 데이터 처리: Excel 저장 날짜, 시간은 모두 수치 형식으로 저장되며, 읽을 때 POI가 먼저 수치 유형인지 아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.