POI (Excel) + Spring + JSP

 

POI lib 을 사용한 excel 파일 생성 및 다운로드

 

 

1. dependency 추가(HSSF 예제)

1
2
3
4
5
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.15</version>
</dependency>
cs

* HSSF이외에 XSSF, SXSSF 라이브러리 존재. 

HSSF : excel 의 .xls 파일 포맷을 위한 POI

XSSF : .xls 및 .xlsx 파일 포맷을 위한 POI

SXSSF : 이미지 및 대용량 엑셀 데이터를 위한 POI

SXSSF 의 경우 HSSF, XSSF에 비해 성능이 떨어지는 거라는 글을 봤음, 대용량 처리가 아닌 이상 XSSF 혹은 HSSF 사용

 

2. 엑셀 파일 생성(HSSF 사용 예제)

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
@Override
    public HSSFWorkbook listExcelDownload(VO param) throws Exception {
        
        
        HSSFWorkbook workbook = new HSSFWorkbook();
        
        HSSFSheet sheet = workbook.createSheet("엑셀시트명");
        
        HSSFRow row = null;
        
        HSSFCell cell = null;
        
        param.setPager(false);
        param.setNullText(NULL_TEXT);
        param.setSeparator(DELI_EXCEL);
        List<VO> list = Dao.selectList(param);
        
        row = sheet.createRow(0);
        String[] headerKey = {"칼럼1""칼럼2""칼럼3""칼럼4"};
        
        for(int i=0; i<headerKey.length; i++) {
            cell = row.createCell(i);
            cell.setCellValue(headerKey[i]);
        }
        
        for(int i=0; i<list.size(); i++) {
            row = sheet.createRow(i + 1);
            StbcsTaskHstVO vo = list.get(i);
            
            cell = row.createCell(0);
            cell.setCellValue(vo.getEx1());
            
            cell = row.createCell(1);
            cell.setCellValue(vo.getEx2());
            
            cell = row.createCell(2);
            cell.setCellValue(vo.getEx3());
            
            cell = row.createCell(3);
            cell.setCellValue(vo.getEx4());
 
        }
        
        return workbook;
    }
    
cs

* HSSF lib 사용시

HSSFWorkbook 생성 > HSSFWorkbook에 HSSFSheet 생성 > HSSFSheet에 HSSFRow 생성 > HSSFRow에 HSSFCell 생성

* XSSF lib 사용시

흐름은 위와 동일, HSSF을 XSSF로만 바꿔주면 됨(ex: HSSFWorkbook >> XSSFWorkbook).

 

 

3. Controller (엑셀 다운로드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RequestMapping(value="/exceldownload.do")
    public void excelDownload( HttpServletRequest request ,HttpServletResponse response ,HttpSession session, VO param) throws Exception {
        
        OutputStream out = null;
        
        try {
            HSSFWorkbook workbook = Service.listExcelDownload(param);
            
            response.reset();
            response.setHeader("Content-Disposition""attachment;filename=stbcs_history.xls");
            response.setContentType("application/vnd.ms-excel");
            out = new BufferedOutputStream(response.getOutputStream());
            
            workbook.write(out);
            out.flush();
            
        } catch (Exception e) {
            logger.error("exception during downloading excel file : {}", e);
        } finally {
            if(out != nullout.close();
        }    
    }
cs

 

4. jsp

1
2
3
4
5
6
7
8
9
/* 엑셀다운로드 */
function downloadExcel(){
 
    var f = document.frmSearch;
    f.action = "/exceldownload.do";
    f.submit();
    
    return;
}
cs

 

 

 

 

반응형

+ Recent posts