POI 라이브러리를 이용한 엑셀 다운로드

Hanbyul·2023년 11월 27일

Java

목록 보기
15/23
@RequestMapping(value = "/downloadExcel", method = RequestMethod.GET)

클라이언트가 "/downloadExcel" URL로 GET 요청을 보내면 이 메서드를 실행하도록 설정.

public void downloadExcel(HttpServletResponse response) throws IOException {

-> 이것은 downloadExcel이라는 메서드를 선언하는 부분.
이 메서드는 클라이언트에게 HTTP 응답을 보내기 위해 HttpServletResponse 객체를 매개변수로 받음.

Workbook workbook = new XSSFWorkbook();

-> Apache POI 라이브러리를 사용하여 XLSX 형식의 새로운 엑셀 워크북을 생성.

Sheet sheet = workbook.createSheet("게시판 리스트");

-> 워크북에 새로운 시트를 생성하고 "게시판 리스트"라는 이름을 부여.

Row row = null;

-> 엑셀 행을 참조할 Row 객체를 선언. 아직 어떤 행도 참조하고 있지 않으므로 null로 초기화.

int rowNo = 1;

-> 엑셀 행의 인덱스를 저장할 변수를 선언하고 1로 초기화.
0번 행은 헤더로 사용될 것이므로, 데이터는 1번 행부터 시작.

Row headerRow = sheet.createRow(0);

-> 0번 행에 새로운 행을 생성하고, 이를 headerRow라는 변수가 참조.

headerRow.createCell(0).setCellValue("번호");

-> headerRow 행의 0번 셀을 생성하고, 이 셀의 값을 "번호"로 설정. 이하 4줄도 마찬가지.

List<Map<String, Object>> list = boardService.list();

-> boardService의 list 메서드를 호출하여 게시판의 모든 게시물을 가져옴.
각 게시물은 Map 객체로 표현되며, 이 Map 객체들의 리스트가 반환.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

-> 날짜를 "yyyy-MM-dd" 형식의 문자열로 변환하기 위한 SimpleDateFormat 객체를 생성.

for (Map<String, Object> map : list) {

-> 가져온 모든 게시물에 대해 반복을 수행.

row = sheet.createRow(rowNo++);

-> 새로운 행을 생성하고, 이를 row 변수가 참조. 그리고 행 인덱스를 1 증가시킴.

row.createCell(0).setCellValue((Integer) map.get("no"));

-> row 행의 0번 셀을 생성하고, 이 셀의 값을 게시물의 번호로 설정. 이하 4줄도 마찬가지.

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;");

-> HTTP 응답의 Content-Type 헤더를
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"으로 설정하여,
클라이언트에게 엑셀 파일이 반환될 것임을 알림.

response.setHeader("Content-Disposition", "attachment; filename=board_data.xlsx");

-> HTTP 응답의 Content-Disposition 헤더를 설정하여,
클라이언트가 이 파일을 "board_data.xlsx"라는 이름으로 다운로드하도록 함.

workbook.write(response.getOutputStream());

-> 워크북의 내용을 HTTP 응답의 출력 스트림에 쓰고, 이를 클라이언트에게 보냄.

workbook.close(); }

-> 워크북을 닫음. 이렇게 하면 사용한 리소스를 해제하여 메모리 누수를 방지할 수 있음.

profile
공부공부

0개의 댓글