====== Apache POI MS Office Document ====== * http://poi.apache.org/ * https://github.com/ozlerhakan/poiji ====== Excel ====== ===== SXSSFWorkbook ===== * [[http://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html|SXSSFWorkbook]]를 사용하면 MS Office 2007 OOXML 형태로 엑셀 파일을 생성하며, * 생성중 데이터를 임시로 디스크에 기록하는 방식으로 메모리를 아낄 수 있다. * 임시 파일로 저장하는 것이지 지정된 ''OutputStream''으로 스트리밍하는 것이 아니다. * 임시 저장용 파일을 꼭 [[https://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html#dispose()|SXSSFWorkbook.dispose()]]를 호출하여 삭제해줘야 한다. * [[http://poi.apache.org/spreadsheet/how-to.html#sxssf|SXSSF HowTo]] ===== Excel 버전에 무관하게 읽기 ===== * [[http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html|WorkbookFactory]]를 사용하면 읽으려는 엑셀 파일의 버전을 자동 판단하여 [[http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html|HSSFWorkbook (2007 이전 버전)]]과 [[http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html|XSSFWorkbook (2007 이후 버전)]] 객체를 생성하여 리턴한다. ===== Sheet ===== ==== Column Width ==== sheet.setColumnWidth(col, charCount * 256); // 넓이 지정하는 값이 문자의 256분의 1을 나타냄. ===== POI Memory Leak ===== ''java.io.DeleteOnExitHook'' 객체가 잔뜩 생성되면서 Leak 이 되는 현상이 발생한다. 이는 POI 에서 임시로 생성한 파일을 JVM 종료시 삭제하라는 Hook 객체이다. 해결하려면 ''poi.keep.tmp.files'' System Property를 설정해주어야 한다. 값은 비워두어도 된다. System.setProperty("poi.keep.tmp.files", ""); 단, 이 경우 임시로 생성한 파일이 삭제가 안되면서 디스크 용량이 증가할 가능성도 있으므로 임시 디렉토리를 잘 설정해줘야 할 것으로 보인다. ===== 참조 ===== * [[https://javatechonline.com/how-to-convert-excel-data-into-list-of-java-objects-poiji-api/|How To Convert Excel Data Into List Of Java Objects : Poiji API | Making Java Easy To Learn]]