728x90
반응형
 이전에 jsp 페이지를 바로 엑셀로 다운로드 하는 방법을 포스트한 적(http://zero-gravity.tistory.com/172)이 있었는데, 이번에 소개할 방법은 자바 라이브러리인 POI를 사용해 엑셀 파일을 생성/추출하는 방법이다.


   이전의 방법은 헤더만 엑셀로 변환하는 식이었다면, POI를 사용하는 방법은 html의 header만 바꿔서 출력하는 게 아니라 그냥 바로 자바단에서 엑셀 파일을 핸들링하는 식이다.


   헤더만 바꾸는 방법은 앞서 소개했듯이 저장할 때 다른 이름으로 저장해야 한다는 약간의 문제점이 있는데, POI를 사용하면 그럴 필요가 없다. 왜냐, 그냥 파일 자체를 엑셀로 만들어버리기 때문이다.


   난이도로 따지면 헤더만 바꾸는 게 더 쉽긴 하다. 하지만, 라이브러리를 사용하는 데에 익숙한 사람이라면 POI를 사용하는 걸 추천한다.


   이걸 사용하면 엑셀 뿐만 아니라, 워드, 파워포인트, 아웃룩.. 등.. MS Office군에 있는 것들을 제어할 수 있다.




   사용 방법은 간단하다. 엑셀을 예로 들겠다.


   일단 http://poi.apache.org/download.html 에 가서 라이브러리 파일을 다운로드 받고, 프로젝트에 추가한다.


   그리고, 그냥 사용하면 된다.


   API 참고 : https://poi.apache.org/apidocs


   바쁜 개발자들을 위해 친절하게 http://poi.apache.org/spreadsheet/quick-guide.html <- 예제들도 잔뜩이다.


   그냥 저것들만 보면 다~ 할 수 있다. 영어 못하는 사람은 좀 힘들겠지만.. 그닥 어려운 말은 없는지라..



   아래는 간단하게 엑셀 파일을 출력하는 샘플 코드이다.


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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
public class ExcelMain {
 
    public static void main(String[] args) {
         
        // Workbook 생성
        Workbook xlsWb = new HSSFWorkbook(); // Excel 2007 이전 버전
        Workbook xlsxWb = new XSSFWorkbook(); // Excel 2007 이상
 
        // *** Sheet-------------------------------------------------
        // Sheet 생성
        Sheet sheet1 = xlsWb.createSheet("firstSheet");
 
        // 컬럼 너비 설정
        sheet1.setColumnWidth(0, 10000);
        sheet1.setColumnWidth(9, 10000);
        // ----------------------------------------------------------
         
        // *** Style--------------------------------------------------
        // Cell 스타일 생성
        CellStyle cellStyle = xlsWb.createCellStyle();
         
        // 줄 바꿈
        cellStyle.setWrapText(true);
         
        // Cell 색깔, 무늬 채우기
        cellStyle.setFillForegroundColor(HSSFColor.LIME.index);
        cellStyle.setFillPattern(CellStyle.BIG_SPOTS);
         
        Row row = null;
        Cell cell = null;
        //----------------------------------------------------------
         
        // 첫 번째 줄
        row = sheet1.createRow(0);
         
        // 첫 번째 줄에 Cell 설정하기-------------
        cell = row.createCell(0);
        cell.setCellValue("1-1");
        cell.setCellStyle(cellStyle); // 셀 스타일 적용
         
        cell = row.createCell(1);
        cell.setCellValue("1-2");
         
        cell = row.createCell(2);
        cell.setCellValue("1-3 abccdefghijklmnopqrstuvwxyz");
        cell.setCellStyle(cellStyle); // 셀 스타일 적용
        //---------------------------------
         
        // 두 번째 줄
        row = sheet1.createRow(1);
         
        // 두 번째 줄에 Cell 설정하기-------------
        cell = row.createCell(0);
        cell.setCellValue("2-1");
         
        cell = row.createCell(1);
        cell.setCellValue("2-2");
         
        cell = row.createCell(2);
        cell.setCellValue("2-3");
        cell.setCellStyle(cellStyle); // 셀 스타일 적용
        //---------------------------------
 
        // excel 파일 저장
        try {
            File xlsFile = new File("D:/testExcel.xls");
            FileOutputStream fileOut = new FileOutputStream(xlsFile);
            xlsWb.write(fileOut);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
         
    }
 
}


   주의할 것은 2007 이상 버전으로 확장자가 xlsx로 되는 엑셀 파일을 핸들링하고 싶을 땐, new XSSFWorkbook()로 Workbook을 생성해줘야 한다는 점이다.

   버전에 따라 생성하는 워크북만 다른 뿐, 나머지는 다 똑같다.

   단, XSSFWorkbook(2007 버전 이상)을 생성하고 싶다면 라이브러리 파일을 프로젝트에 추가할 때, poi-ooxml-3.10.1.jar 파일이 필요하다.


   위의 것을 실행하면 아래와 같은 testExcel.xls 파일이 만들어진다.


(MS Office가 없어서 한셀로 열었다)



   위 샘플 코드는 간단하게 행과 셀을 생성해서 넣는 식인데, 조금만 응용하면 DB에 있는 내용을 불러와서 for문을 이용해 엑셀을 작성할 수 있을 것이다.


   또, 위에 링크 걸어놓은 가이드를 보면 기존의 엑셀 파일에서 데이터를 뽑아오는 방법이나 다른 여러 설정들이 있으니 더 많은 걸 원하는 사람은 가이드를 잘 살펴보길 바란다.

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,