티스토리 뷰
안녕하세요. 오늘은 게시판 목록들을 엑셀로 다운로드 할 수 있는 엑셀 다운로드에 대해서 알아보겠습니다.
엑셀 다운로드를 설정하는 방법에는 여러가지 방법이 있지만 저는 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 { Listlist = service.listExcelDownload(); model.addAttribute("list", list); return new listExcelDownload(); }
그 다음으로 엑셀을 다운로드 하기 위한 엑셀 뷰를 다음과 같이 설정하도록 하겠습니다.
public class listExcelDownload extends AbstractXlsxView { @Override protected void buildExcelDocument(MapmodelMap, 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(); } } }
그런 다음 테스트를 위해서 리스트 목록을 띄워 엑셀 다운로드를 해보도록 하겠습니다.
아래의 이미지와 같은 제가 미리 만들어 놓은 리스트를 볼 수 있고 우측 상단에 엑셀다운로드 버튼을 클릭합니다.
클릭하는 순간, 엑셀 파일이 다운로드가 되며 실행해보시면 설정한 상태의 엑셀 파일을 확인하실 수 있습니다.
이것으로 엑셀 다운로드에 관한 포스팅을 마치도록 하겠습니다. 추후에는 엑셀 업로드도 참고해서 포스팅을 작성해보겠습니다.
감사합니다 :)
- Total
- Today
- Yesterday