티스토리 뷰

공장 (factory)/- Programming..

[Java] POI - 자바로 엑셀 파일 출력하기

공부하는 나부랭이, 무중력고기 2014.08.28 20:30

   이전에 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 <- 예제들도 잔뜩이다.


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



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


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문을 이용해 엑셀을 작성할 수 있을 것이다.


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



댓글
댓글쓰기 폼
Total
1,086,082
Today
30
Yesterday
889
«   2018/09   »
            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            
글 보관함