티스토리 뷰
이전에 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문을 이용해 엑셀을 작성할 수 있을 것이다.
또, 위에 링크 걸어놓은 가이드를 보면 기존의 엑셀 파일에서 데이터를 뽑아오는 방법이나 다른 여러 설정들이 있으니 더 많은 걸 원하는 사람은 가이드를 잘 살펴보길 바란다.
'공장 (factory) > - Programming..' 카테고리의 다른 글
[Java] HmacSHA1 암호화 (1) | 2014.09.26 |
---|---|
Window 환경에서 OpenSSL 설치 및 사용하기 (3) | 2014.09.24 |
[node.js] forever 모듈 실행 에러. (5) | 2014.08.22 |
[node.js] Most middleware (like logger) is no longer bundled with Express and must be installed separately... (3) | 2014.08.22 |
[jQuery] 2개의 요소에 있는 스크롤바 동시에 움직이기 (0) | 2014.08.14 |