티스토리 뷰

개발/JAVA

[jxls] jxls 사용법

senni 2015. 12. 30. 16:56


OO카드 프로젝트에 나가서 엑셀로 데이터를 내려받을때 보고서화를 해야하는 상황이 있었다.


차트가 들어가야 해서 poi만 사용해서는 처리가 불가능해 어떻게 해야하나 하던 도중 jxls라는걸 알게되었고

java, ibatis, jXLS와 poi를 사용해 보고서를 뽑아냈다.


인터넷에 나와있는 자료들과 jxls 예제 샘플, 가이드 등 너무 자료가 부족했기 때문에

또 나같은 사람이 없길 바라며 내가 알게된 부분에 대해서 적어볼까 한다.


1. 필요한 라이브러리 

아래 사이트에서 사용하는 jdk 컴파일 버전에 맞춰 다운로드 받으면 된다.

** 필수 **

jXLS (http://sourceforge.net/projects/jxls/files/)

JEXL (https://archive.apache.org/dist/commons/jexl/)

POI (http://archive.apache.org/dist/poi/release/bin/)

** 추가 선택 **

Common Utils (http://archive.apache.org/dist/commons/beanutils/, http://archive.apache.org/dist/commons/digester/)


2. 샘플 파일 생성

일단 jxls는 샘플이 되는 템플릿 xls 파일을 만들어야 하는데, 셀에 치환할 데이터를 넣기 위해서는 아래와 같은 형식을 사용한다.

그리고 데이터를 치환할 시트를 지정해주지 않아도 엑셀 파일 안의 치환될 모든 내용이 자동으로 모두 치환된다.

2-1. 데이터 치환

 - Syntax: ${DataName.PropertyName}

2-2. 함수(수식) 치환

 - Syntax: $[Function]

2-3. jxls 태그

1) forEach (반복문)

<jx:forEach items="${DataName}" var="data">

${data.PropertyName}

<jx:forEach>

2) forEach (그룹핑 반복문)

EntityName 컬럼을 기준으로 그룹핑하여 반복한다. 또한 그룹핑된 컬럼은 group.items가 DataName의 역할을 하게된다.

<jx:forEach items="${DataName}" groupBy="EntityName">

${group.items.EntityName}

<jx:forEach items="${group.items}" var="data" >

${data.PropertyName}

</jx:forEach>

</jx:forEach>

3) if (조건문)

<jx:forEach items="${DataName}" var="data">

<jx:if test="${data.PropertyName< 30}">

${data.PropertyName}

</jx:forEach>


3. 데이터 생성

데이터는 Map 타입으로 넘겨주게 되는데, 쿼리로 받아온 entity list는 무조건 String Type으로 치환되어 엑셀의 수식이 적용되지 않기 때문에 나의 경우 Bean을 생성하여 문자형, 숫자형 변수에 셋팅하여 사용했다.


4. 데이터 셋팅

Map beans = new HashMap();

beans.put("DataName", BeanName);

XLSTransformer transformer = new XLSTransformer();

transformer.transformXLS("엑셀템플릿파일이름.xls", beans, "엑셀결과파일이름.xls");



공식사이트: http://jxls.sourceforge.net/getting_started.html








댓글