반응형

아파치 POI 라이브러리를 이용한 VO LIST 엑셀파일로 출력하기

 

1. 라이브러리 다운

http://poi.apache.org/download.html

 

Apache POI - Download Release Artifacts

Apache POI - Download Release Artifacts Available Downloads This page provides instructions on how to download and verify the Apac

poi.apache.org

 

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을 줬을 때

단위가 뭔지는 모르겠음. . . 

반응형

+ Recent posts