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 |