티스토리 뷰

안녕하세요. 오늘은 게시판 목록들을 엑셀로 다운로드 할 수 있는 엑셀 다운로드에 대해서 알아보겠습니다.

엑셀 다운로드를 설정하는 방법에는 여러가지 방법이 있지만 저는 AbstractXlsxView를 이용해서 진행하도록 하겠습니다.


우선, pom.xml파일에 다음과 같이 Excel설정 dependency를 추가합니다.


<!-- EXCEL -->

<!-- excel xls -->

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi</artifactId>

<version>3.13</version>

</dependency>

<!-- excel xlsx -- >

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>3.13</version>

</dependency>


엑셀 다운로드 버튼을 통해서 요청을 받는 컨트롤러를 다음과 같이 설정하도록 하겠습니다.

        /**
	 * 엑셀 다운로드.
	 * 
	 * @param request
	 * @param response
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/excelDownload")
	public View excelDownload(HttpServletRequest request, HttpServletResponse response, Model model, BoardVO board)
			throws Exception {
		
		List list = service.listExcelDownload();

		model.addAttribute("list", list);

		return new listExcelDownload();
	}


그 다음으로 엑셀을 다운로드 하기 위한 엑셀 뷰를 다음과 같이 설정하도록 하겠습니다.

public class listExcelDownload extends AbstractXlsxView {

	@Override
	protected void buildExcelDocument(Map modelMap, Workbook workbook, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		String sCurTime = null;
		sCurTime = new SimpleDateFormat("yyyyMMdd", Locale.KOREA).format(new Date());
	
		String excelName = sCurTime + "_샘플엑셀다운로드.xlsx";
		Sheet worksheet = null;
		Row row = null;
		CellStyle style = workbook.createCellStyle(); // 셀 스타일을 위한 변수
		style.setAlignment(CellStyle.ALIGN_CENTER); // 글 위치를 중앙으로 설정
		
		List listExcel = (List) modelMap.get("list");
		
	    // 새로운 sheet를 생성한다.
	    worksheet = workbook.createSheet("엑셀 목록");
	    
	    // 가장 첫번째 줄에 제목을 만든다.
	    row = worksheet.createRow(0);
	    
	    // 칼럼 길이 설정
	    int columnIndex = 0;
	    while (columnIndex < 7) {
	    	
	    	if(columnIndex == 0) {
	    		worksheet.setColumnWidth(columnIndex, 3000);
	    	} else if (columnIndex == 1) {
	    		worksheet.setColumnWidth(columnIndex, 4000);
	    	} else if (columnIndex == 2) {
	    		worksheet.setColumnWidth(columnIndex, 6000);
	    	} else if (columnIndex == 3) {
	    		worksheet.setColumnWidth(columnIndex, 4000);
	    	} else if (columnIndex == 4) {
	    		worksheet.setColumnWidth(columnIndex, 7000);
	    	} else if (columnIndex == 5) {
	    		worksheet.setColumnWidth(columnIndex, 3000);
	    	} else if (columnIndex == 6) {
	    		worksheet.setColumnWidth(columnIndex, 3000);
	    	}
	    	columnIndex++;
	    }
	    
	    // 헤더 설정
	    row = worksheet.createRow(0);
	    row.createCell(0).setCellValue("ID");
	    row.createCell(1).setCellValue("제목");
	    row.createCell(2).setCellValue("내용");
	    row.createCell(3).setCellValue("작성자");
	    row.createCell(4).setCellValue("등록일시");
	    row.createCell(5).setCellValue("조회 수");
	    row.createCell(6).setCellValue("댓글 수");
	    
	    int rowIndex = 1;
	    
	    // 각 해당하는 셀에 값과 스타일을 넣음
	    for(BoardVO board : listExcel) {
	    	row = worksheet.createRow(rowIndex);
	    	row.createCell(0).setCellValue(board.getBno());
	    	row.createCell(1).setCellValue(board.getTitle());
	    	row.createCell(2).setCellValue(board.getContent());
	    	row.createCell(3).setCellValue(board.getWriter());
	    	row.createCell(4).setCellValue(board.getRegdate().toLocaleString());
	    	row.createCell(5).setCellValue(board.getViewcnt());
	    	row.createCell(6).setCellValue(board.getReplycnt());
	    	
	    	rowIndex++;
	    }
	    
	    // 셀 병합 CellRangeAddress(시작 행, 끝 행, 시작 열, 끝 열)
	    worksheet.addMergedRegion(
	    		new CellRangeAddress(listExcel.size() + 1, listExcel.size() + 1, 0, 6));
	    
	    // 병합 테스트를 위한 설정
	    row = worksheet.createRow(listExcel.size() + 1);
	    row.createCell(0).setCellValue("셀 병합 테스트");
	    row.getCell(0).setCellStyle(style); // 지정한 스타일을 입혀준다.
	    
	    
	    try {
	        response.setHeader("Content-Disposition", "attachement; filename=\""
	            + java.net.URLEncoder.encode(excelName, "UTF-8") + "\";charset=\"UTF-8\"");
	      } catch (UnsupportedEncodingException e) {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
	      }
	}
}

그런 다음 테스트를 위해서 리스트 목록을 띄워 엑셀 다운로드를 해보도록 하겠습니다.

아래의 이미지와 같은 제가 미리 만들어 놓은 리스트를 볼 수 있고 우측 상단에 엑셀다운로드 버튼을 클릭합니다.



클릭하는 순간, 엑셀 파일이 다운로드가 되며 실행해보시면 설정한 상태의 엑셀 파일을 확인하실 수 있습니다.


이것으로 엑셀 다운로드에 관한 포스팅을 마치도록 하겠습니다. 추후에는 엑셀 업로드도 참고해서 포스팅을 작성해보겠습니다.

감사합니다 :)