이번에 실무에서 엑셀 다운로드 관련한 서비스에서 null Exception 이슈가 생겨 기존의 다운로드 방식에서 jxls 방식으로 전환 하는 개발이 있었는데 처음 접해보다 보니 이번에 정리를 하게 됐다,,,
속성명 | 설명 |
---|---|
jx:area(lastCell=”셀 위치”) | 명령어 영역의 마지막 셀 위치, 예시 캡쳐를 보면 02 까지만 명령어 영역이라고 지정되어 있는 것을 확인 가능하다. |
items=”컨텍스트 명” | 자바 단에서 생성한 데이터를 담을 변수 명을 지정 |
var=”모델명” | 각 셀마다 $(표현식)과 함께 사용할 모델명 → 자바단에서 생성한 변수들과는 연관성이 없고 엑셀에서 x.변수명 이런식으로 통일되게 사용해줘야한다. |
,,,,중략
// 1. 엑셀에 넣을 데이터들을 담을 list 생성
List<InterfaceListDto> ifList = interfaceListDao.getInterfaceList(cond);
// 2. inputStream을 이용해서 미리 생성해둔 엑셀 템플릿 객체를 생성한다.
try (InputStream is = new FileInputStream(templateFile)) {
// 3. outputStream을 이용해서 데이터를 담은 새로운 엑셀 템플릿을 생성한다.
try (OutputStream os = new FileOutputStream(resultFile)) {
PoiContext context = new PoiContext();
// 4. 엑셀에서 items의 컨텍스트 명을 지정한 것을 key로 하여 ifList 데이터를 넣는다.
context.putVar("list", ifList);
// 5. 미리 생성해둔 템플릿(is)을 읽어들이고, 넣을 데이터(context)를 새롭게 생성할 템플릿(os)에
// 넣는다.
JxlsHelper.getInstance().processTemplate(is, os, context);
}
}
추가로 더 다양한 엑셀 다운로드 기법들이 있지만 이번에는 jxls을 사용하게 되어서 정리해 보았다
그리고 jxls 의 단점이 데이터가 많을 수록 메모리 사용이 높아짐에 따라 성능 저하 이슈가 있다.