본문 바로가기

Trouble Shooting

[Spring Boot] POI 여러 CellStyle 사용 시 마지막 셀의 스타일만 적용이 되는 오류 해결방법

TL;DR

하나의 CellStyle에 여러 개의 스타일을 동시에 넣을 수 없기 때문에 따로따로 만들어주는 방법으로 해결했다.

 

문제 발생

POI를 사용해서 하나의 CellStyle에서 여러 스타일을 사용할 때 마지막 셀의 스타일이 전체에 적용되는 오류가 발생했다.

원했던 결과물

 

하지만 ... ㅠㅠ

해결 방법

구글링으로 열심히 뒤져보니 하나의 CellStyle에 여러 개의 스타일을 넣을 수 없었다.

그래서 기존 소스 코드를 보면

    Cell cells = rows.createCell(29); // 쿠폰
    cells.setCellStyle(style);

이런 식으로 하나의 CellStyle을 계속 재사용하면서 사용했기 때문에 위와 같은 이슈가 발생했던 것이었다. 그렇다고 하나의 row마다 createCellStyle()을 이용해서 만들기에는 CellStyle은 한 번에 만들 수 있는 개수가 제한되어있었다.

 

그래서 아예 처음부터 사용하는 스타일을 미리 만들어두고 꺼내쓰는 방법으로 해결을 했다. 엑셀 데이터를 넣는 로직이 다른 메소드에 있어서 한 번에 넘기기 편하게 하기 위해 Map으로 만들었다.

    HashMap<String, CellStyle> style = new HashMap<>();
    
    style.put("red", ExcelUtils.createWorkbookAndSetStyle(wb, RED.index));
    style.put("black", ExcelUtils.createWorkbookAndSetStyle(wb, BLACK.index));
    style.put("blue", ExcelUtils.createWorkbookAndSetStyle(wb, BLUE.index));

다른 방법도 시도해보면서 더 좋은 방법이 있는지 찾아봐야겠다 😗