엑셀 2007 이전 xls
엑셀 2007 부터 xlsx
에 대한 처리를 지원하는 Apache poi에 대해서 알아본다.
poi는 아파치 오픈 소스로서 엑셀을 읽거나 쓸 수 있다.
여기선 읽는 부분에 대해서 살펴보겠다.
홈페이지: http://poi.apache.org/
여기선 poi-3.14 버전으로 구현
기본적으로 엑셀을 읽는데 크게 2개의 클래스를 아래와 같이 제공한다.
- HSSF: xls 읽기
- XSSF: xlsx 읽기
확장명에 따라 처리가 가능하지만 2개를 나누어서 처리하기보다
WorkbookFactory.create를 쓰면 쉽게 처리가 가능하다.
예제
// 엑셀파일, 패스워드, 읽기전용
// 첫 번째 인자 엑셀 파일은 타입에 따라 생성 클래스가 다른데 살펴볼 필요가 있다.
Workbook workbook = WorkbookFactory.create(new File(excel), null, true);
// Cell에 값이 없을 경우 빈 값으로 가져오기
workbook.setMissingCellPolicy(MissingCellPolicy.CREATE_NULL_AS_BLANK);
// 수식된 값을 가져오기 위함
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
// 0번째 시트를 가져옴
Sheet sheet = workbook.getSheetAt(0);
// 첫 번째 row부터 마지막 row까지 처리
for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
// 첫 번째 column부타 마지막 column까지 처리
for (short j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
// Cell 타입 -> 수식일 경우는 수식이 적용된 값의 타입
int cellType = (cell.getCellType() == Cell.CELL_TYPE_FORMULA)
? evaluator.evaluateFormulaCell(cell) : cell.getCellType();
// Cell 타입에 따라 분기 처리
switch (cellType) {
case Cell.CELL_TYPE_NUMERIC:
// 날짜 형태도 숫자로 인식하기 때문에 아래와 같이 날짜형태인 확인
// 날짜에 문자가 있을 경우 예로 2016년 1월 1일 이럴 경우는 인식이 안되는 듯 하는데 확인 필요
if (HSSFDateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.format(cell.getDateCellValue());
} else {
DecimalFormat df = new DecimalFormat();
df.format(cell.getNumericCellValue());
}
break;
default:
cell.getStringCellValue();
break;
}
}
}
끝.
'Java, JSP' 카테고리의 다른 글
메이븐 로컬저장소에 직접 등록 명령어 (0) | 2016.12.14 |
---|---|
ThreadLocal(스레드로컬) (0) | 2016.08.16 |
Java ServerSocket Multithereading 예제 (0) | 2016.04.25 |
Java 큐(Queue) 종류 및 특성 (0) | 2016.03.30 |
Java return generic type (map to bean) (0) | 2015.06.12 |
댓글