예전부터 써왔던 엑셀관련 라이브러리다.
엑셀 외에도 word, 파워포인트,비지오, 아웃룩등을 지원 하는거 같은데
본인은 POI 라이브러리는 주로 엑셀 업/다운로드에 자주 사용한다.
xlsx 까지 지원을 해주긴 하지만 이번 포스팅은 xls만 샘플로 제작하도록 하겠음
보통 DB에서 조회데이터를 list 객체에 담아서 해당 데이터를 for문에 돌려서 row를
생성하고 각각의 셀에 해당 데이터들을 담고 파일로 생성한 후 다운로드 로직을 태운다.
spring + mybatis 작업으로 관련된 샘플로직을 만들어 봤다.
다운로드 URL은 http://poi.apache.org/download.html 인거 같다.
다운받아서 해당 라이브러리를 프로젝트에 추가해주고 작업하였다.
1. db 조회후 list 객체에 담는다.
* 주의할점
list객체에서 받는 타입의 vo객체는 db에서 result한 컬럼의 순서및 뽑는 컬럼수에
맞춰서 작업해주어야 한다.
ex ) ibatis/mybatis에서 조회 쿼리
SELECT a,b,c FROM table_name
이라고 주었을 경우
resultClss의 vo 객체 내에 들어있는 getter/setter
SampleVO.java
public class SampleVO { private String a; private String b; private String c; public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; } }
해당형식으로 지정해주고, 컨트롤러영역의 엑셀다운로드 샘플이다.
////////// 엑셀 쓰는 핵심 부분 //////////////
//DB에서 조회한 데이터 LIST객체에 List객체의 제너릭은 Object타입 담는다. List<Object> excelList = service.getExcelList(entity); //getExcelList의 return type은 List타입의 제너릭은 SampleVO로 정함. //문자열 형식의 제목을 excelTtitle변수에 담는다(후에 split을 통해서 배열로 만들것임) String excelTitle = "배열제목1,배열제목2,배열제목3"; //다운받을 파일명 String downFileNm = "시트제목"; HSSFWorkbook wb = new HSSFWorkbook(); //시트 생성 HSSFSheet sheet = wb.createSheet(downFileNm); String titleArr[] = excelTitle.split(","); // 첫번째 행에 각각의 컬럼 제목작성 HSSFCell cell = null; HSSFRow row = sheet.createRow(0); for(int titleNo=0; titleNo < titleArr.length; titleNo ++){ cell= row.createCell(titleNo); cell.setCellValue(titleArr[titleNo]); } int i=1; //DB에서 조회한 목록데이터를 담은 LIST객체를 OBJECT타입으로 돌린다 //VO종류가 무엇이든 상관없음? for(Object obj : list) { row = sheet.createRow((short)i); int j = 0; for (Field field : obj.getClass().getDeclaredFields()) { field.setAccessible(true); Object value = field.get(obj); if(value == null) { cell= row.createCell(j); cell.setCellValue(""); } else { cell= row.createCell(j); cell.setCellValue(String.valueOf(value)); } j++; } i++; } FileOutputStream fileOut = null; try { fileOut = new FileOutputStream("D:\\test.xls"); wb.write(fileOut); fileOut.close(); } catch (IOException e) { throw new RuntimeException("런타임에러가 발생하였습니다."); }
해당 소스를 응용하시면 되실거 같습니다.
json-simple 라이브러리를 이용한 ObjecToString 과 StringToObject 코드구현 (2) | 2014.07.04 |
---|---|
자바 파일다운로드 - 멀티 브라우저지원 샘플코드 (0) | 2014.06.12 |
엑셀다운 POI 라이브러리 - 엑셀파일에서 내용 읽기 (0) | 2014.06.10 |
게시물 번호 구하기 샘플소스 (0) | 2014.06.09 |
자바 썸네일 이미지 생성 (0) | 2014.06.09 |