개발자의 끄적끄적

[java] POI Excel xlsx compat [펌] 본문

개발/java & jsp

[java] POI Excel xlsx compat [펌]

효벨 2020. 3. 20. 10:35
728x90
반응형

[java] POI Excel xlsx compat [펌]

 

 

POI Excel xlsx compat : POI 엑셀 xlsx 확장자 호환

Description

예전 L모 회사에서 HTML, POI(HSFF) 두가지 버전을 사용중에
Excel 2007에서 Excel 2010으로 업그레이드 하면서 xls 확장자를 가지게 되는 파일을 열때
호환성 문제로 인해 문제 파악 후 직접 개선한 내용이다.
기존 AS-IS 환경은 다음과 같았다.

AS-IS POIAS-IS JDK

3.2 1.4.2_10

확장자

  • xls : 2007 이전 버전 (97 ~ 2003)
  • xlsx : 2007 이후 버전 (xml사용)

Excel Version 호환성 개선 위해 xlsx을 사용

  • 추가적 이점 : 대용량 Data Excel 생성 가능

xlsx 사용 요구 환경

  • xlsx를 사용하기 위해서는 POI 3.5 이상의 Library가 필요.
  • JDK 1.5이상 필요.

POI Excel Version and Description

POI VersionJDK VersionDescription

Up to 3.4 Up to JDK 1.4.x xlsx 미지원
3.5 ~ 3.10 JDK 1.5 ~ xlsx 지원
3.11 ~ 3.13(latest version) JDK 1.6 ~ xlsx 지원
  • TO-DO : xlsx 사용 및 기존 환경에서 변경시 충돌을 최소화 하기위해 POI 3.5, JDK 1.5 사용

* 간혹 지금 Java8 까지 나왔는데 Java8은 아니더라도 1.6이나 1.7은 써야 하는거 아니냐고 물을수도 있을거같다.
대기업 시스템 같은 경우는 변경시 트러블 슈팅이라던지 디버깅이 자유롭지도 않고
회사측 Framework 사용시 최대 지원하는 JDK Version에 맞춰야 한다던지
오픈날 미 파악된 이슈가 있을시 시스템 Rollback은 물론이며 기타 등등 고려할것도 많기 때문에 환경 변경시 충돌 최소화
기준으로 변경하였다.

POI, JDK Version Upgrade에 따른 호환성 여부

Problem 1

기존 POI(xls) 생성시 Text Bold 처리시 Error 발생

Solution 1

기존 HSSFrichTextString Class method가 CreationHelper으로 변경 되어
import를 다음과 같이 변경하였다
org.apache.poi.hssf.usermodel.* -> org.apache.poi.ss.usermodel.*
(추측하기론 HSSF 이후 XSSF가 추가되며 효과 및 서식 관련 Class가 통합되어 package가 변경된듯하다.)

Problem 2

enum이 예약어로 지정됨에 따라 enum으로 사용하는 변수명 사용시 Error 발생.

Solution 2

enum으로 사용하는 변수명 변경.

추가 참조

org.apache.poi.ss.usermodel은 이전 HSSF의 usermodel(org.apache.poi.hssf.usermodel) 기반이며
org.apache.poi.ss.usermodel에는 공통으로서 Workbook, Row, Cell, CellStyle, Font, Merge 등등이
모두 포함되어있음.

작업 진행 방향

  • 아직 Excel 2010을 사용하지 않는 사용자도 있기 때문에 HTML Excel, POI(HSSF), POI(XSSF)
    3가지 버전으로 생성
  • 추가되는 POI(xlsx)는 명시적으로 XSSF가 아닌 Apache 홈페이지에 기술 되어있는 공통형식으로 생성
    (추후 2017버전 나올시 적은 공수 호환)

추가 Library

poi-3.10.1-20140818.jar
poi-examples-3.10.1-20140818.jar
poi-excelant-3.10.1-20140818.jar
poi-ooxml-3.10.1-20140818.jar
poi-ooxml-schemas-3.10.1-20140818.jar
poi-scratchpad-3.10.1-20140818.jar
dom4j-1.6.1.jar
stax-api-1.0.1.jar
xmlbeans-2.6.0.jar

작업 진행 순서

Import 추가

org.apache.poi.ss.usermodel.*
org.apache.poi.ss.util.*

공통으로 사용시 type에 따라 Import 추가

org.apache.poi.hssf.usermodel.*
org.apache.poi.xssf.usermodel.*

instance Class, 및 Method 변경

FunctionAS-ISTO-BE

Create Workbook HSSFWorkbook Workbook
Create Sheet HSSFSheet Sheet
Create Row HSSFRow Row
Create Cell HSSFCell Cell
Cell Type HSSFCell.CELL_TYPE_STRING Cell.CELL_TYPE_STRING
Create Cell Style HSSFCellStyle CellStyle
Cell Style Sort HSSFCellStyle.VERTICAL_CENTER CellStyle.VERTICAL_CENTER
Cell Style Background color new HSSFColor.GREY_25_PERCENT().getIndex() IndexedColors.GREY_25_PERCENT.getIndex()
Row or Cell merge new Region(START_ROW, (short)START_COL, END_ROW, (short)END_COL) new CellRangeAddress(START_ROW, END_ROW, START_COL, END_COL)

 

 

출처 : https://mun-su.github.io/2017/08/23/dev/java/poi-excel_xlsx_compat/

반응형
Comments