봉봉의 개인 블로그

2017-11-03(엑셀 poi write 관련) 본문

입사후 공부한내용

2017-11-03(엑셀 poi write 관련)

봉봉이네 2017. 11. 3. 14:20

Maven에서 poi 설정 및 자바 엑셀 파일 처리하기


POI Library를 이용한 Excel Write


1. 라이브러리 maven 설정

HSSF(xls) 엑셀파일을 생성하기 위해서는 poi라이브러리만 있으면 되지만 XSSF(xlsx)엑셀 파일을 생성하기 위해서는 poi-ooxml 라이브러리가 필요하다.

1
2
3
4
5
6
7
8
9
10
<dependency>
 <groupId>org.apache.poi</groupId>
 <artifactId>poi</artifactId>
 <version>3.7</version>
</dependency>    
<dependency>
 <groupId>org.apache.poi</groupId>
 <artifactId>poi-ooxml</artifactId>
 <version>3.7</version>
</dependency>
cs

2예제 소스

(CustomerExcelWriter Class)

실제 엑셀파일을 생성하는 주요 클래스

주요동작은 아래 작업을 통해서 필요한 만큼 Sheet,Row,Cell을 생성하여 FileOutputStream으로 저장처리 하면 된다.

*xsl : HSSFWorkbook 생성 -> HSSFSheet 생성 -> HSSFRow 생성 -> HSSFCell 생성

*xlsx : XSSFWorkbook 생성 -> XSSFSheet 생성 -> XSSFRow 생성 -> XSSFCell 생성

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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
public void xlswiter(List<CustomerVo> list){
    //워크북 생성
    HSSFWorkbook workbook = new HSSFWorkbook();
    //워크시트 생성
    HSSFSheet sheet = workbook.createSheet();
    //행 생성
    HSSFRow row = sheet.createRow(0);
    //셀 생성
    HSSFCell cell;
 
    //헤더 정보 구성
    cell = row.createCell(0);
    cell.setCellValue("id");
 
    cell = row.createCell(1);
    cell.setCellValue("name");
    
    cell = row.createCell(2);
    cell.setCellValue("age");
 
    cell = row.createCell(3);
    cell.setCellValue("email");
 
    //리스트의 size 만큼 row를 생성
    CustomerVo vo;
    for(int rowlistcount = 0 ; rowlistcount < list.size() ; rowlistcount++){
        vo = list.get(rowlistcount);
        //행 생성
        row = sheet.createRow(rowlistcount+1);
        
        cell = row.createCell(0);
        cell.setCellValue(vo.getCustId());
 
        cell = row.createCell(1);
        cell.setCellValue(vo.getCustName);
 
        cell = row.createCell(2);
        cell.setCellValue(vo.getCustAge);
 
        cell = row.createCell(3);
        cell.setCellValue(vo.getCustEmail);
 
    }
 
    //입력된 내용 파일로 쓰기
    File file = new File("C:\\excel\\testWrite.xls");
    FileOutputStream fos = null;
 
    try{
        fos = new FileOutputStream(file);
        workbook.write(fos);
    }catch(FileNotFoundException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        try{
            if(workbook != null) workbook.close();
            if(fos != null) fos.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}
public void xlsxwiter(List<CustomerVo> list){
    //워크북 생성
    XSSFWorkbook workbook = new XSSFWorkbook();
    //워크시트 생성
    XSSFSheet sheet = workbook.createSheet();
    //행 생성
    XSSFRow row = sheet.createRow(0);
    //셀 생성
    XSSFCell cell;
    //헤더 정보 구성
    cell = row.createCell(0);
    cell.setCellValue("id");
    cell = row.createCell(1);
    cell.setCellValue("name");
    
    cell = row.createCell(2);
    cell.setCellValue("age");
    cell = row.createCell(3);
    cell.setCellValue("email");
    //리스트의 size 만큼 row를 생성
    CustomerVo vo;
    for(int rowlistcount = 0 ; rowlistcount < list.size() ; rowlistcount++){
        vo = list.get(rowlistcount);
        //행 생성
        row = sheet.createRow(rowlistcount+1);
        
        cell = row.createCell(0);
        cell.setCellValue(vo.getCustId());
        cell = row.createCell(1);
        cell.setCellValue(vo.getCustName);
        cell = row.createCell(2);
        cell.setCellValue(vo.getCustAge);
        cell = row.createCell(3);
        cell.setCellValue(vo.getCustEmail);
    }
    //입력된 내용 파일로 쓰기
    File file = new File("C:\\excel\\testWrite.xls");
    FileOutputStream fos = null;
    try{
        fos = new FileOutputStream(file);
        workbook.write(fos);
    }catch(FileNotFoundException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        try{
            if(workbook != null) workbook.close();
            if(fos != null) fos.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}
cs

이런식이라고 생각하면 되고


MainApplication Class

CustomerExcelWiter 를 호출하고 종료

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args){
    //엑셀로 쓸 데이터 생성
    List<CustomerVo> list = new ArrayList<CustomerVo>();
    
    list.add(new CustomerVo("No.1","play1","21","no1@gmail.com"));
    list.add(new CustomerVo("No.2","play2","22","no2@gmail.com"));
    list.add(new CustomerVo("No.3","play3","23","no3@gmail.com"));
    list.add(new CustomerVo("No.4","play4","24","no4@gmail.com"));
    list.add(new CustomerVo("No.5","play5","25","no5@gmail.com"));
 
    CustomerExcelWriter excelWriter = new CustomerExcelWriter();
    //xls 파일 쓰기
    excelWriter.xlswiter(list);
    //xlsx 파일 쓰기
    excelWriter.xlsxwiter(list);
}
cs

이런식과 같이 main 에서 호출해주면 된다.


*tip*

xls형식

* Microsoft Excel 97-2003 버전 사용되는  형식

* 최대 256 컬럼 , 65,536행 제한

* POI를 이용하여 데이터 접근 시 org.apache.poi.hssf 패키지 이용

* org.apache.poi.hssf.usermodel.HSSFWorkbook

* org.apache.poi.hssf.usermodel.HSSFSheet

* org.apache.poi.hssf.usermodel.HSSFRow

* org.apache.poi.hssf.usermodel.HSSFCell


xlsx형식

* Microsoft Excel 2007 이 후 버전 사용되는  형식

* 최대 16,384 컬럼 , 1,048,567행 제한

* POI를 이용하여 데이터 접근 시 org.apache.poi.xssf 패키지 이용

* org.apache.poi.hssf.usermodel.XSSFWorkbook

* org.apache.poi.hssf.usermodel.XSSFSheet

* org.apache.poi.hssf.usermodel.XSSFRow

* org.apache.poi.hssf.usermodel.XSSFCell

Comments