샘플소스/샘플소스(JAVA)

POI 라이브러리를 이용하여 엑셀파일(XLSX) 만들기 - 6만건 이상일 경우 추천

개발로짜 2014. 7. 14. 19:01

전에 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만건을 넣어본결과 파일이 잘 저장된다!