스프링부트 jxls 엑셀 탬플릿 이용하여 만들기
2022. 10. 6. 17:32ㆍ스프링
dependency 추가
implementation 'org.jxls:jxls:2.12.0'
implementation 'org.jxls:jxls-poi:2.12.0'
implementation 'org.apache.poi:poi:5.2.2'
implementation 'org.apache.poi:poi-ooxml:5.2.2'
jxls 1.x 버전을 사용하지 않고 2.x로 구현했다.
poi 라이브러리도 사용하기 때문에 poi도 추가해줘야 한다.
@GetMapping("/excel.json")
public void excel(JavaBean bean, HttpSession session, HttpServletResponse res) throws IOException, InvalidFormatException {
InputStream template = resourceLoader.getResource("classpath:탬플릿.xlsx").getInputStream();
OutputStream target = res.getOutputStream();
Workbook workbook = WorkbookFactory.create(template);
workbook.setSheetName(0, "탬플릿1");
PoiTransformer transformer = PoiTransformer.createTransformer(workbook);
transformer.setOutputStream(target);
List<JavaBean> list = service.excel(bean);
Context context = new Context();
context.putVar("enList", list);
res.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", URLEncoder.encode("다운로드.xlsx", "UTF-8")));
JxlsHelper.getInstance().processTemplate(context, transformer);
}
일단 프로젝트 내부 경로에 사용할 탬플릿 파일을 넣어두고 그 데이터 경로로 들어가 데이터를 읽는다
또 읽은 데이터를 가공해서 데이터를 내보낸다.
탬플릿에 사용할 객체들 또한 가지고 온다.
Workbook 같은 경우엔 엑셀 내부를 커스터마이징 하기 위해 객체를 생성했다. workbook에 많은 메소드는 검색을 통해
찾아보면 된다. 그리고 나서 Context 객체를 생성 후에 탬플릿에 사용할 객체를 키, 벨류 쌍으로 넣어준다.
여기서 키는 템플릿에 사용할 ${} 표현식과 일치해야 한다.
window.location.href=`/excel.json?{컨트롤러에 보내줄 파라미터}`
화면단에서는 이렇게 간단히 호출만 하면 다운로드가 완료된다.
템플릿 표현식 같은 경우에는
이런식으로 사용하면 된다. 전체 저 변수가 적용될 에어리어로 마지막 셀인 F4를 지정해주고
each에 items에는 putVar에 넣어던 키값과 매칭이 되어야 한다.
현재는 매우 단순하지만 복잡한 탬플릿에서는 poi로 직접 자바단에서 구현하는 것 보다 jxls로 간단히 구현하는 게 훨씬 간단하다.
물론 대용량 데이터 같은 경우에는 추천하지 않는다. 대용량 같은 경우 poi SXSSF로 구현하는 걸 추천한다.
'스프링' 카테고리의 다른 글
스프링부트 oauth 소셜로그인(카카오, 네이버, 구글) 구현 (0) | 2023.02.28 |
---|---|
SXSSF 대용량 엑셀 다운로드 공통화 (0) | 2023.02.24 |
스프링부트 excel 대용량 다운로드 처리 SXSSF (0) | 2022.10.12 |
스프링부트 cron 표현식 연도 생략 해야함 주의! (0) | 2022.09.26 |
스프링부트 스케줄러 동적 처리 (1) | 2022.09.26 |