| sitelink1 | http://erictus.tistory.com/86 |
|---|---|
| sitelink2 | |
| sitelink3 | |
| extra_vars4 | |
| extra_vars5 | |
| extra_vars6 |
성능 분석이라고는 썻지만 그정도는 아니고, 이번 업무로 기존 Jxl을 사용하던 방식에서 POI로 변환하는 부분인데, 겨우 9천건 ~ 3만건정도인데 너무 느리기에 이를 개선하는 업무였다.
따라서, 자연스럽게 엑셀 생성의 핵심인 Workbook에 대해 알아보자!!
Workbook의 종류로는 엑셀 97~2003버전인 HSSF , 엑셀 2007이상의 XSSF, 가장 최근에 나온 성능개선버전의 SXSSF...
결론부터 말하자면, "고전만큼 좋은게 없다"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | public class test { private Sheet s; public static final int HSSF = 0; public static final int XSSF = 1; public static final int SXSSF = 2; private Workbook wb; public test(int type) { // TODO 자동 생성된 생성자 스텁 switch(type){ case HSSF : wb = new HSSFWorkbook(); break; case XSSF : wb = new XSSFWorkbook(); break; case SXSSF : wb = new SXSSFWorkbook(-1); break; } } public Row getRow(int i){ Row r = s.getRow(i); if(r==null) r = s.createRow(i); return r; } public Cell getCell(int row,int cell){ Row r = getRow(row); Cell c = r.getCell(cell); if(c==null) c = r.createCell(cell); return c; } public void setCellValue(int row, int cell, String cellvalue){ Cell c = getCell(row,cell); c.setCellValue(cellvalue); } public void writeWorkbook(String fileName){ long start = System.currentTimeMillis(); try{ s = wb.createSheet("sample Sheet"); for(int i=0;i<10000;i++){ setCellValue(i,0,"Test_Title_"+i); setCellValue(i,1,"Test_Title_"+i); setCellValue(i,2,"Test_Title_"+i); setCellValue(i,3,"Test_Title_"+i); setCellValue(i,4,"Test_Title_"+i); setCellValue(i,5,"Test_Title_"+i); setCellValue(i,6,"Test_Title_"+i); setCellValue(i,7,"Test_Title_"+i); setCellValue(i,8,"Test_Title_"+i); setCellValue(i,9,"Test_Title_"+i); setCellValue(i,10,"Test_Title_"+i); } wb.write(new FileOutputStream(fileName)); }catch(Exception e){ e.printStackTrace(); System.err.println(e.getMessage()); } long end = System.currentTimeMillis(); System.out.println("writeHSSFWorkbook : "+(end-start)); } /** * @param args */ public static void main(String[] args) { // TODO 자동 생성된 메소드 스텁 test hssf = new test(test.HSSF); hssf.writeWorkbook("hssf-sample.xls"); test xssf = new test(test.XSSF); xssf.writeWorkbook("xssf-sample.xls"); test sxssf = new test(test.SXSSF); sxssf.writeWorkbook("sxssf-sample.xls"); }} |
못믿겠다면 결과를 보자..
대략 3만건의 데이터를 만드는 소요 시간을 계산해보았당..
보다 싶이 HSSF와 SXSSF의 경우 속도가 괜찮지만....XSSF........
선택은 본인들이...
ps. SXSSF를 사용하게 될 경우, 생각보다 많은 의존성이 필요하다...(최소 이정도의 xml관련 Lib가 필요하다..)
HSSF 쓸 경우, poi-3.9....jar만 있음됨.
poi-ooxml-schemas-3.9-20121203.jar
poi-scratchpad-3.9-20121203.jar
그리고 한가지더!!
만약 jdk 1.5이하를 사용할 경우 jdk 1.6부터 추가된 "javax.xml.stream.*"관련 소스를 참조하기때문에 에러가 발생한다...
쫄지말자.. 까짓거 jdk1.6이상 소스에서 아래와 같은 파일만 추가하면된다...(물론 JDK1.6이상일 경우는 문제없다..)
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 58 | 톰캣에서 로그 파일 저장시 ansi 로 저장되는 현상 | 황제낙엽 | 2024.10.21 | 103 |
| 57 |
Jsoup 을 이용하여 웹 크롤링(Web Crawling)
| 황제낙엽 | 2023.08.09 | 105 |
| 56 | Apache Log4j™ 2 사용하기 | 황제낙엽 | 2023.04.28 | 100 |
| 55 | Migrating from Log4j 1.x to 2.x | 황제낙엽 | 2023.04.28 | 101 |
| 54 |
SLF4J 를 사용해야 하는 이유
| 황제낙엽 | 2022.09.17 | 87 |
| 53 | Apache Log4j 2 Configuration 파일 설정 | 황제낙엽 | 2020.04.01 | 318 |
| 52 |
이클립스에서 JUnit 사용하기
| 황제낙엽 | 2019.04.02 | 198 |
| 51 | 각 레벨별 출력파일 설정 예제 | 황제낙엽 | 2018.09.18 | 241 |
| 50 |
log4j-1.2.15.jar 와 log4j.properties 예제
| 황제낙엽 | 2017.08.04 | 298 |
| » |
POI HSSF, XSSF, SXSSF 성능 분석
| 황제낙엽 | 2013.11.05 | 1687 |
| 48 | POI-HSSF and POI-XSSF - Java API To Access Microsoft Excel Format Files | 황제낙엽 | 2013.11.05 | 1199 |
| 47 | Commons Logging과 Log4J | 황제낙엽 | 2013.03.07 | 201 |
| 46 |
Library & Properties 파일
| 황제낙엽 | 2011.12.23 | 517 |
| 45 |
Cell 의 wrap 설정 (텍스트 개행)
| 황제낙엽 | 2011.05.09 | 3155 |
| 44 |
XSSF Examples
| 황제낙엽 | 2011.05.04 | 362 |
| 43 | 병합된 셀의 스타일( border) 설정하기 | 황제낙엽 | 2011.05.03 | 1786 |
| 42 | 셀 크기 조정 (자동 크기 조정) | 황제낙엽 | 2011.05.03 | 7839 |
| 41 | 셀 병합 | 황제낙엽 | 2011.05.03 | 255 |
| 40 | WebSphere 에서 Log4j 사용하기 | 황제낙엽 | 2011.04.15 | 149 |
| 39 |
Map 사용 예제
| 황제낙엽 | 2010.10.17 | 126 |
