JXLS 사용 엑셀 다운로드

정병웅·2023년 2월 12일
0

자바

목록 보기
1/8

이번에 실무에서 엑셀 다운로드 관련한 서비스에서 null Exception 이슈가 생겨 기존의 다운로드 방식에서 jxls 방식으로 전환 하는 개발이 있었는데 처음 접해보다 보니 이번에 정리를 하게 됐다,,,

JXLS(제이엑셀)의 의미

  • 개발자가 미리 만들어둔 엑셀 템플릿에 원하는 데이터들을 자동으로 넣을 수 있게 지원하는 라이브러리

JXLS(제이엑셀)의 생성 과정

  1. jxls에서 제공하는 라이브러리들의 메서드들을 이용해서 베이스 템플릿을 생성한다.
  2. 자바 쪽의 모델(dto 또는 model)의 속성(변수)명과 엑셀 템플릿(베이스 템플릿) 파일 내의 속성명을 일치 시켜주면, 모델에 저장된 데이터들이 엑셀 파일에 지정된 셀에 데이터가 insert 된다.

JXLS(제이엑셀)의 단점

  1. 데이터를 메모리에 계속 저장 시켜놓기 때문에 데이터가 많을 수 록 속도가 저하
    → 따라서 데이터의 크기를 제한 하는 하드코딩을 해야할 수 있음.
  2. 1번의 경우에 연관 되어 oom이 발생 될 수 있다.

JXLS(제이엑셀) 구현 예시 (엑셀 파일 부분)

1. 원하는 칼럼에 commet를 입력한다.

속성명설명
jx:area(lastCell=”셀 위치”)명령어 영역의 마지막 셀 위치, 예시 캡쳐를 보면 02 까지만 명령어 영역이라고 지정되어 있는 것을 확인 가능하다.
items=”컨텍스트 명”자바 단에서 생성한 데이터를 담을 변수 명을 지정
var=”모델명”각 셀마다 $(표현식)과 함께 사용할 모델명 → 자바단에서 생성한 변수들과는 연관성이 없고 엑셀에서 x.변수명 이런식으로 통일되게 사용해줘야한다.

JXLS(제이엑셀) 구현 예시 (자바 코드 부분)

,,,,중략
// 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 의 단점이 데이터가 많을 수록 메모리 사용이 높아짐에 따라 성능 저하 이슈가 있다.

profile
인생은 IT 노가다

0개의 댓글