티스토리 뷰
프로그래밍/JAVA
(Java)Apache Poi 사용시 "The maximum number of Cell Styles was exceeded.." 이슈 해결법
rlawlstjd007 2020. 8. 8. 10:24들어가며
- Apache Poi를 사용하여 Exel Write 기능을 구현하는 중에 아래와 같은 에러가 발생했다.
- 대충 상황을 살펴보니 cell styling 기능을 사용하는데 이때 Style을 적용하는 Cell이 너무 많다는 의미인 것 같았다.
The maximum number of Cell Styles was exceeded. You can define up to 64000 style in a .xlsx Workbook
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:831)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.createCellStyle(XSSFWorkbook.java:754)
at com.jinseong.soft.util.FileIOUtil.writeExcelFile(FileIOUtil.java:62)
at com.jinseong.soft.service.MainService.start(MainService.java:123)
at com.jinseong.soft.Application.main(Application.java:24)
원인
- 검색을 통해서 보니 workbook으로 부터 생성하는 CellStyle 인스턴스가 너무 많아지는 상황에서 라이브러리 자체에서 에러를 발생시키는 것 같았다.
- 실제로 코드를 보면 아래와 같이 setStyle 메서드를 호출 할때마다 workBook에서 CellStyle 인스턴스를 생성하고 있었다.
- 결과적으로 64000개 이상의 Cell에 대해서 해당 작업이 일어나고 있었다.
private void createCell() {
XSSFWorkbook workbook = new XSSFWorkbook();
Cell cell;
//Cell 하나당 CellStyle 객체 하나
setStyle(cell, workbook.createCellStyle());
}
private void setStyle(Cell cell, XSSFCellStyle style) {
style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cell.setCellStyle(style);
}
해결방법
- 해결된 코드는 아래와 같다. 어차피 적용되는 CellStyle은 한정적이다. (예제에서는 하나의 스타일만 생성함)
- 그렇기 때문에 CellStyle을 미리 생성해두고 해당 인스턴스를 재사용하는 방법으로 해결하였다.
- 예제가 적절하지 않을 수도 있을 것 같다.
- 그렇기 때문에 여기서 중요한 건 CellStyle 객체를 재사용한다는 것이다.
private void createCell() {
XSSFWorkbook workbook = new XSSFWorkbook();
//CellStyle을 미리 생성
XSSFCellStyle style = workbook.createCellStyle();
style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Cell cell;
setStyle(cell, style);
}
private void setStyle(Cell cell, XSSFCellStyle style) {
cell.setCellStyle(style);
}
관련글
[Java] Apache poi 사용시 "Zip bomb detected.." 에러 발생시 해결법
들어가며 Apache poi를 사용하여 Exel write 기능을 구현하는데 아래와 같은 에러가 발생하면서 실패하였다. Zip bomb detected! The file would exceed the max. ratio of compressed file size to the size of t..
jinseongsoft.tistory.com
JAVA 엑셀 파일 불러오기
Java 엑셀 파일 불러오기 이번 시간에는 Java 에서 엑셀 파일을 불러와 데이터를 가져오는 방법에 대해서 알아보겠습니다. 우선 엑셀파일을 준비하시구요 저는 이 파일을 사용하겠습니다. 우�
jinseongsoft.tistory.com
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
(Java) Key, Mouse Hooking(리스너) 기능 구현 방법 (0) | 2020.08.10 |
---|---|
[Java] Video URL 다운로드 시에 전체 다운로드 되지 않는 경우 해결방법 (0) | 2020.08.09 |
[Java] PNG 파일에 Meta 데이터 추가하는 방법 (0) | 2020.08.07 |
[Java] URL로 부터 File Download 하는 방법 (0) | 2020.08.05 |
[Java] 스트림 슬라이싱 (0) | 2020.08.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 자전거
- windows
- JavaFX
- JavaFX 종료
- git
- 자바
- 배낭 여행
- JavaFX 테이블뷰
- TableView
- JavaFX Table View
- 이펙티브 자바
- effectivejava
- intelij
- 배낭여행
- JavaFX Window Close
- 스프링부트
- 일본 배낭여행
- 방통대 과제물
- 자전거 여행
- effective java
- 일본 여행
- 이펙티브
- 이펙티브자바
- springboot
- 일본여행
- 일본 자전거 여행
- 인텔리제이
- java
- Java UI
- 텐트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함