poi
sxssf
#
Find similar titles
- 최초 작성자
- 최근 업데이트
Structured data
- Category
- Programming
Table of Contents
apache POI #
Java 언어로 마이크로소프트 오피스 파일을 읽고 쓸 수 있는 기능을 가진 라이브러리이다. Java 개발자라면 POI를 이용하여 Excel 문서를 만들고 내려받는 기능을 만드는 데 자주 사용해보았을 것이다. POI의 다양한 구현체를 통하여 엑셀뿐만 아니라 마이크로소프트 오피스 파일 포맷 대부분을 읽고 쓸 수 있다.
XSSF #
POI의 하위 컴포넌트 중 가장 익숙한 구현체이다. xlsx 확장자 파일을 읽고 쓸 수 있는 컴포넌트이다. 엑셀에서 사용할 수 있는 많은 기능들을 Java로 프로그래밍할 수 있다. 하지만 XSSF 포맷은 행 쓰기 할 때 메모리를 비우지 않아 이슈가 있다. 데이터양이 많지 않은 경우는 편하게 사용할 수 있지만, 데이터양이 많아질수록 Out of Memory(일명 OOM) 이슈가 발생할 가능성이 크다.
SXSSF #
XSSF와 유사한 기능을 제공하지만, 파일을 쓰는 방식이 다르다. XSSF는 쓰기 시에 데이터를 메모리에 적재하는 방식인데 이 때문에 쓰려는 데이터양이 많다면 OOM 이슈가 발생한다. SXSSF는 임시 파일을 생성해 중간중간(행 단위로 flush 진행함) 데이터를 처리하기 때문에 메모리가 매우 적게 사용할 수 있다.
SXSSF 쓰기 전용 #
SXSSF는 쓰기 전용이라 빈 행에 getRow 사용할 때 Null Pointer Exception(일명 NPE)을 발생시킬 수 있으니 주의해야 한다. 또한 쓰려는 행이 비어 있지 않은 생태에서도 Exception이 발생한다. 엑셀 다운로드 기능을 개발할 때 Java에서 엑셀 파일의 스타일을 편집할 수도 있지만 스타일이 이미 적용된 엑셀 파일을 불러와 데이터만 쓰는 방식으로 개발을 진행한다. SXSSF 방식은 쓰기 전용이니 기존 스타일을 못 불러올까?
SXSSF 기존 파일 불러오기 #
스타일이 적용된 엑셀 파일을 불러올 때는 XSSF 방식으로 불러온다. 실제 파일을 쓸 때는 SXSSF 방식으로 진행하여 XSS 방식의 장점인 개발의 편의와 SXSSF의 장점인 적은 메모리 사용을 모두 얻을 수 있다.
FileInputStream fis = null;
ServletOutputStream out = null;
XSSFWorkbook wb = null;
SXSSFWorkbook swb = null;
//스타일이 적용된 엑셀 파일 경로
String path = "(Sample)excel.xlsx";
try {
//스타일이 적용된 엑셀 파일을 불러올때는 XSSF 방식
fis = new FileInputStream(path);
wb = new XSSFWorkbook(fis);
// SXSSF 생성, 100행 단위로 임시파일에 데이터를 flush함
swb = new SXSSFWorkbook(wb, 100);
// SXSSF 데이터 쓰기
... 생량
out = response.getOutputStream();
swb.write(out);
} catch (IOException e) {
... 생략
}
실제 데이터를 쓰는 방식은 Sheet, Row, Cell을 가져오거나 생성하여 진행한다. XSSF 방식과 유사하므로 생략한다.
참고 출처 #
- 위키 아파치 POI
- 티스토리, ddasi-live ddasi-live