문제
Ajax 를 이용하여 300건 정도의 데이터를 Apache POI 를 이용하여 엑셀 파일 생성 중 Ajax timeout 을 10초로 해 두었는데 timeout 이 발생하여 원인을 확인한 결과 sheet.autoSizeColumn() 함수 처리에 시간이 오래 걸리는 현상을 발견
해결방법
row 마다 컬럼의 문자열 길이를 이용하여 너비를 가중치를 이용하여 늘려주는 방식
문자열 길이 최대 70 까지만 적용되도록 함 ( 문자열 길이가 너무 길어지면 너비가 너무 커짐 방지 )
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 |