somoly.tistory.com

문제

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
profile

somoly.tistory.com

@RxCats

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