반응형
java.lang.IllegalStateException: The maximum number of Cell Styles was exceeded. You can define up to 64000 style in a .xlsx Workbook
at org.apache.poi.xssf.model.StylesTable.createCellStyle(StylesTable.java:815)

 

◆ 에러원인


이 에러는 Apache POI(XSSF)가 새로 만든 CellStyle 객체를 내부적으로 인덱스(스타일 테이블)에 하나씩 등록하는데, 

그 갯수가 엑셀(.xlsx) 포맷에서 허용하는 최대 64,000개를 넘어버릴 때 발생한다.

 

쉽게 생각하면, Apache POI는 포맷(폰트, 배경색, 테두리 등)이 조금이라도 다르면 새 스타일로 인식하는데, 이렇게 누적된 스타일 수가 64,000개를 초과하면 IllegalStateException이 발생한다고 생각하면 된다.

 

◆ 해결방안


코드를 찾아보니 루프안에서 workbook.createCellStyle()를 매번 호출하고 있었는데 이 부분을 반복문 안에서 매번createCellStyle() 을 호출하는 대신, 필요한 스타일을 미리 생성해 두고 각 셀에는 미리 만든 스타일을 재사용하는 방식으로 로직을 변경함.

row.createCell(...).setCellStyle(미리만든스타일)

 


글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --
반응형