반응형
아파치 POI 라이브러리를 이용한 VO LIST 엑셀파일로 출력하기
1. 라이브러리 다운
http://poi.apache.org/download.html
2. 압축 해제 및 프로젝트에 넣기
(상위에 있는 jar 파일들 포함하여 ooxml-lib, lib 하위의 jar 파일 모두 WEB-INF>lib 에 넣어주기)
3. 컨트롤러에 엑셀 출력을 위한 코드 작성
//엑셀로 출력하기
@RequestMapping(value="/board/excelDown.do")
public void excelDown(HttpServletResponse response) throws Exception {
//게시판 목록조회
List<BoardVo> boardList = boardService.selectAll();
//1. 워크북 생성(생성하고자 하는 엑셀 형태에 따른 선언)
Workbook wb = new XSSFWorkbook(); //xlsx 엑셀 2007 이상
//2. 시트 생성 및 시트명 설정(매개변수를 비우면 default)
Sheet sheet1 = wb.createSheet("test");
//3. 열 너비 설정
sheet1.setColumnWidth(0, 5500);
sheet1.setColumnWidth(1, 5500);
sheet1.setColumnWidth(2, 5500);
sheet1.setColumnWidth(3, 5500);
sheet1.setColumnWidth(4, 5500);
//4.테이블 헤더 스타일 지정
CellStyle headStyle = wb.createCellStyle();
//데이터 가운데 정렬
headStyle.setAlignment(HorizontalAlignment.CENTER);
//경계선
headStyle.setBorderTop(BorderStyle.THIN);
headStyle.setBorderBottom(BorderStyle.THIN);
headStyle.setBorderLeft(BorderStyle.THIN);
headStyle.setBorderRight(BorderStyle.THIN);
// 배경색은 연두색
headStyle.setFillForegroundColor(HSSFColorPredefined.LIGHT_GREEN.getIndex());
headStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//5. 헤더 생성
Row row = null;
Cell cell = null;
int rowNo = 0;
row = sheet1.createRow(rowNo++);
cell = row.createCell(0);
cell.setCellStyle(headStyle);
cell.setCellValue("boardType");
cell = row.createCell(1);
cell.setCellStyle(headStyle);
cell.setCellValue("boardNum");
cell = row.createCell(2);
cell.setCellStyle(headStyle);
cell.setCellValue("boardTitle");
cell = row.createCell(3);
cell.setCellStyle(headStyle);
cell.setCellValue("boardComment");
cell = row.createCell(4);
cell.setCellStyle(headStyle);
cell.setCellValue("Creator");
//6. 테이블 바디 스타일 지정
CellStyle bodyStyle = wb.createCellStyle();
//데이터 가운데 정렬
bodyStyle.setAlignment(HorizontalAlignment.CENTER);
//경계선
bodyStyle.setBorderTop(BorderStyle.THIN);
bodyStyle.setBorderBottom(BorderStyle.THIN);
bodyStyle.setBorderLeft(BorderStyle.THIN);
bodyStyle.setBorderRight(BorderStyle.THIN);
//7. 데이터 부분 생성
for(BoardVo vo : boardList) {
row = sheet1.createRow(rowNo++);
cell = row.createCell(0);
cell.setCellStyle(bodyStyle);
cell.setCellValue(vo.getBoardType());
cell = row.createCell(1);
cell.setCellStyle(bodyStyle);
cell.setCellValue(vo.getBoardNum());
cell = row.createCell(2);
cell.setCellStyle(bodyStyle);
cell.setCellValue(vo.getBoardTitle());
cell = row.createCell(3);
cell.setCellStyle(bodyStyle);
cell.setCellValue(vo.getBoardComment());
cell = row.createCell(4);
cell.setCellStyle(bodyStyle);
cell.setCellValue(vo.getCreator());
}
//8. 컨텐츠 타입과 파일명 지정
response.setContentType("ms-vnd/excel");
response.setHeader("Content-Disposition", "attachment;filename=test.xlsx");
//9. 엑셀 출력
wb.write(response.getOutputStream());
wb.close();
출력 예시
setColumnWidth에서 너비 5500을 줬을 때
단위가 뭔지는 모르겠음. . .
반응형
'코딩 관련 > Java' 카테고리의 다른 글
[JAVA] 스레드 상태 제어, java.lang.IllegalMonitorStateException (0) | 2021.03.12 |
---|---|
[JAVA] 임계영역 지정 : 동기화(synchronized) 메소드와 동기화 블록 (0) | 2021.03.12 |
[JAVA] Thread 생성. 스레드 만들기 (0) | 2021.03.12 |
[JAVA] Exception, throws, throw, printStackTrace 등 (0) | 2021.03.07 |
[Java] java에서 ==와 equals (0) | 2020.09.18 |