전에 xls 파일 생성후 다운로드 샘플을 포스팅하였다.
위 포스팅의 단점은 엑셀 2003 파일이라서 최대 65,536 row라
10만건 데이터 같은 경우는 Exception이 발생한다.
이런 문제를 해결하기 위해 xlsx 의 샘플링을 추가로 구현하였다.
xlsx의 최대쓰기가능 row는 1,048,576 row다.
하지만 과연 100만건의 데이터를 엑셀로 쓸 이유가 있을까?
그리고 과연 서버+DB가 버텨줄지~~
아무튼 이러한 이유로 xlsx 샘플도 구현을 하였다.
샘플 기준은 xls 샘플링에서 일부 변경으로 다운로드 구현을 하도록 하겠음.
//DB에서 조회한 데이터 LIST객체에 List객체의 제너릭은 Object타입 담는다. List<Object> excelList = service.getExcelList(entity); //getExcelList의 return type은 List타입의 제너릭은 SampleVO로 정함. //문자열 형식의 제목을 excelTtitle변수에 담는다(후에 split을 통해서 배열로 만들것임) String excelTitle = "배열제목1,배열제목2,배열제목3"; //다운받을 파일명 String downFileNm = "시트제목"; XSSFWorkbook wb = new XSSFWorkbook(); //시트 생성 XSSFSheet sheet = wb.createSheet(downFileNm); String titleArr[] = excelTitle.split(","); // 첫번째 행에 각각의 컬럼 제목작성 Cell cell = null; Row row = sheet.createRow(0); for(int titleNo=0; titleNo < titleArr.length; titleNo ++){ cell= row.createCell(titleNo); cell.setCellValue(titleArr[titleNo]); } int i=1; //DB에서 조회한 목록데이터를 담은 LIST객체를 OBJECT타입으로 돌린다 //VO종류가 무엇이든 상관없음? for(Object obj : list) { row = sheet.createRow(i); int j = 0; for (Field field : obj.getClass().getDeclaredFields()) { field.setAccessible(true); Object value = field.get(obj); if(value == null) { cell= row.createCell(j); cell.setCellValue(""); } else { cell= row.createCell(j); cell.setCellValue(String.valueOf(value)); } j++; } i++; } FileOutputStream fileOut = null; try { fileOut = new FileOutputStream("D:\\test.xls"); wb.write(fileOut); fileOut.close(); } catch (IOException e) { throw new RuntimeException("런타임에러가 발생하였습니다."); }
바뀐게 있다면 기존 HSSF -> XSSF 형식으로 앞에 H->X로 변경된점이랑
createRow((short)i) -> short형을 제하고 createRow(i) 로 변경
마지막으로 xls 파일명을 -> xlsx 로 변경이 되었다는 것이다!
10만건을 넣어본결과 파일이 잘 저장된다!
json-simple 라이브러리를 이용한 ObjecToString 과 StringToObject 코드구현 (2) | 2014.07.04 |
---|---|
자바 파일다운로드 - 멀티 브라우저지원 샘플코드 (0) | 2014.06.12 |
엑셀다운 POI 라이브러리 - 엑셀파일에서 내용 읽기 (0) | 2014.06.10 |
게시물 번호 구하기 샘플소스 (0) | 2014.06.09 |
자바 썸네일 이미지 생성 (0) | 2014.06.09 |