/**
* 엑셀 다운로드 구현
*/
private void createExcelDownloadResponse(HttpServletResponse response, List<Map<String,Object>> ListData, String fileName) {
try (SXSSFWorkbook workbook = new SXSSFWorkbook(100); OutputStream out = response.getOutputStream()) {
SXSSFSheet sheet = workbook.createSheet("sheetName");
// 헤더 생성
SXSSFRow headerRow = sheet.createRow(0);
// 데이터 유효성 검사
if (ListData == null || ListData.isEmpty()) {
SXSSFRow row = sheet.createRow(1);
row.createCell(0).setCellValue("No data available");
throw new BadRequestException(ServerResponse.DATA_NOT_EXIST);
}
// 컬럼 너비 자동 설정
int columnIndex = 0;
for (String key : ListData.get(0).keySet()) {
SXSSFCell cell = headerRow.createCell(columnIndex);
cell.setCellValue(key); // 키 값을 Header로 설정
sheet.setColumnWidth(columnIndex, 256 * 15); // 기본 너비 설정
columnIndex++;
}
// 데이터 입력
int rownum = 1;
for (Map<String,Object> info : ListData) {
SXSSFRow row = sheet.createRow(rownum++);
columnIndex = 0;
for (String key : ListData.get(0).keySet()) {
row.createCell(columnIndex).setCellValue(getDefaultValue(info.get(key).toString(),""));
columnIndex++;
}
}
// HTTP 응답 설정
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
String encodedFilename = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
response.setHeader("Content-Disposition",
String.format("attachment; filename*=UTF-8''%s.xlsx", encodedFilename));
workbook.write(out);
out.flush();
} catch (IOException e) {
e.printStackTrace();
throw new BadRequestException(ServerResponse.FAIL_TO_CREATE_EXCEL);
}
}
설명은 주석참고
Service에서 적절한 데이터를 파밍후에
요 createExcelDownloadResponse함수에 HttpServletResponse, 조회한 List 데이터, 파일이름을 넣어주면 된다.
Controller에서 Service를 연결해주면 URL 입력시에 엑셀파일을 다운받을 수 있다.
Controller에서 Response를 변경하지 않도록 신경쓰자.
'Back-End > JAVA' 카테고리의 다른 글
JwtToken 심화과정 (0) | 2024.12.12 |
---|---|
Spring 프로젝트 시작하기 - 로그편 (0) | 2024.12.11 |
Spring 프로젝트 시작하기 - 로그인편 (2) | 2024.11.19 |
Spring 프로젝트 시작하기 - 보안 ) Access Token과 Refresh Token (1) | 2024.11.18 |
Spring 프로젝트 시작하기 - 보안 ) Jwt Token 쿠키 예외처리 (1) | 2024.11.15 |