Apache POI sheet.autoSizeColumn() Speed Up

2023. 8. 8. 09:01·Kotlin

문제

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
'Kotlin' 카테고리의 다른 글
  • Kotlin Coroutine 개념
  • kotlin euc-kr to utf-8 conversion
  • kotlin logger
  • Kotlin Collections overview
somoly
somoly
About me.
  • somoly
    somoly.tistory.com
    somoly
  • 전체
    오늘
    어제
    • 전체 (55)
      • SpringBoot (8)
      • Kotlin (5)
      • Javascript (4)
      • 백엔드 (6)
      • Linux (25)
      • Windows (1)
      • IT (2)
      • FF14 (1)
      • 애니 (1)
      • Figure (1)
      • 회사생활 (1)
  • 블로그 메뉴

    • HOME
    • TAGS
    • MEDIA
    • LOCATION
    • GUESTBOOK
    • ADMIN
    • WRITE
  • 링크

    • [FF14] 5.0 (71-80) 제작 레벨링 매크로
    • [FF14] 갈론드벨
    • [FF14] FFLogs
    • [FF14] Ariyala 장비 시뮬레이터
    • [FF14] 낚시 도우미
    • [FF14] 인테리어 정보
    • [FF14] 의상 코디 정보
  • 공지사항

  • 인기 글

  • 태그

    Kotlin
    string methods
    Spring
    리눅스
    jvminline
    dynamodb local
    종료
    utf-8
    exchage method
    피규어
    부팅
    tabulator
    VirtualBox
    interactive table
    bcmod
    versioncomapre
    linux
    동영상
    83인치
    설치
    springboot
    ubuntu
    최후의 재림
    P2P
    30일전
    accesskey
    HTTP
    77인치
    javascript
    우분투
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
somoly
Apache POI sheet.autoSizeColumn() Speed Up
상단으로

티스토리툴바