• 분류 전체보기 (160)
    • 개인프로젝트 (5)
      • 시연영상모음 (4)
      • 주저리주저리.. (1)
    • 자바스크립트이야기 (69)
      • ExtJS (30)
      • ExtJS 유의사항 (3)
      • HTML5 (1)
      • jQuery (17)
      • jQuery플러그인소개 (9)
      • jQuery UI 소개 (9)
    • 스프링연동하기 (23)
      • spring3 mvc 설정 (4)
      • spring3 mybatis 설정 (4)
      • spring3 기타설정 (11)
      • ibatis and mybatis (4)
    • DB (26)
      • MySQL vs MS-SQL vs O.. (5)
      • MySQL (10)
      • MSSQL (5)
      • Oracle (6)
    • 서버에웹환경구축하기 (13)
      • 1.VirtualBox+CentOS .. (5)
      • 2.JAVA(JDK) 설치 (1)
      • 3.Apache+Tomcat 설치 (3)
      • 4,SVN Server 설치 (1)
      • 5.마리아DB(MariaDB) 설치 (2)
      • 6.몽고DB(MongoDB)설치 (1)
    • 샘플소스 (14)
      • 샘플소스(JAVA) (7)
      • 샘플소스(JSTL) (4)
      • 샘플소스(jQuery/스크립트) (3)
    • 에디터연동 (5)
      • NAVER-스마트에디터 (4)
      • DAUM-다음에디터 (1)
    • 블로그팁 (3)
    • 디지털이야기 (2)
댓글
/98
2014. 7. 14. 19:01
POI 라이브러리를 이용하여 엑셀파일(XLSX) 만들기 - 6만건 이상일 경우 추천

전에 xls 파일 생성후 다운로드 샘플을 포스팅하였다.


2014/06/05 - [샘플소스/샘플소스(JAVA)] - poi 라이브러리를 이용하여 엑셀 파일을 만들어보도록 하자 - (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만건을 넣어본결과 파일이 잘 저장된다!



저작자표시 (새창열림)

'샘플소스 > 샘플소스(JAVA)' 카테고리의 다른 글

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

티스토리툴바