somoly.tistory.com

1. 문제

Ajax 를 이용하여 300건 정도의 데이터를 Apache POI 를 이용하여 엑셀 파일 생성 중 Ajax timeout 을 10초로 해 두었는데 timeout 이 발생하여 원인을 확인한 결과 sheet.autoSizeColumn() 함수 처리에 시간이 오래 걸리는 현상을 발견

 

2. 해결방법

row 마다 컬럼의 문자열 길이를 이용하여 너비를 가중치를 이용하여 늘려주는 방식

문자열 길이 최대 70 까지만 적용되도록 함 ( 문자열 길이가 너무 길어지면 너비가 너무 커짐 방지 )

<kotlin />
fun setColumnSize(sheet: XSSFSheet, index: Int, value: String) { val defaultColumnWidth = 2048 val maxLength = 70 val characterWidth = 256 val lengthWeight = 1.14388 val len = if (value.length >= maxLength) maxLength else value.length val adjust = ((len * lengthWeight).toInt() * characterWidth) + defaultColumnWidth val columnWidth = sheet.getColumnWidth(index) if (columnWidth > adjust) return try { sheet.setColumnWidth(index, adjust) } catch (e: Exception) { // ignore } }

'Kotlin' 카테고리의 다른 글

Kotlin Coroutine 개념  (0) 2023.10.05
kotlin euc-kr to utf-8 conversion  (0) 2023.09.09
kotlin logger  (0) 2023.06.26
Kotlin Collections overview  (0) 2023.03.26
profile

somoly.tistory.com

@RxCats

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!