반응형
안녕하세요
오늘은 poi 라이브러리를 사용한 엑셀 다운로드 예제를 보여드리겠습니다.
pom.xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
의존성 추가를 일단 해주셔야합니다.
public void deliveryExcelDownload(List<Map<String, Object>> deliverList, HttpServletResponse response) throws IOException {
// 워크북 생성
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("엑셀시트"); //엑셀 시트 이름
Row row = null;
Cell cell = null;
int rowNo = 0;
// 테이블 헤더용 스타일 (컬럼)
CellStyle headStyle = wb.createCellStyle();
headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
headStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);
headStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 데이터용 경계 스타일 테두리만 지정 (데이터)
CellStyle bodyStyle = wb.createCellStyle();
bodyStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
bodyStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
bodyStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
bodyStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
bodyStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 헤더 생성
String[] exampleArr = {"이름", "나이", "성별"};
row = sheet.createRow(rowNo++);
for(int i = 0; i < arr.length; i++){
cell = row.createCell(i);
cell.setCellStyle(headStyle);
cell.setCellValue(arr[i].toString());
}
// 데이터 부분 생성
for(Map<String, Object> vo : deliverList) {
row = sheet.createRow(rowNo++);
sheet.autoSizeColumn(0);
sheet.setColumnWidth(0,(sheet.getColumnWidth(0)));
cell = row.createCell(0);
cell.setCellStyle(bodyStyle);
cell.setCellValue(vo.get("NAME").toString());
sheet.autoSizeColumn(1);
sheet.setColumnWidth(1,(sheet.getColumnWidth(1)));
cell = row.createCell(1);
cell.setCellStyle(bodyStyle);
cell.setCellValue(vo.get("AGE").toString());
sheet.autoSizeColumn(2);
sheet.setColumnWidth(2,(sheet.getColumnWidth(2)));
cell = row.createCell(2);
cell.setCellStyle(bodyStyle);
cell.setCellValue(vo.get("GENDER").toString());
}
// 컨텐츠 타입과 파일명 지정
Cookie cookie = new Cookie("fileDownloadToken", URLEncoder.encode("TRUE", "UTF-8"));
cookie.setMaxAge(20);
response.addCookie(cookie);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=excelDownload.xls");
FileOutputStream fileOut = new FileOutputStream("excelDownload.xls"); //엑셀 파일명
// 엑셀 출력
try {
wb.write(response.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fileOut.close();
}
* HSSF이외에 XSSF, SXSSF 라이브러리 존재.
HSSF : excel 의 .xls 파일 포맷을 위한 POI - 97 ~ 07
XSSF : .xls 및 .xlsx 파일 포맷을 위한 POI - 07 ~ 현재
* 버전 차이이기에 선택하시어 진행하시면 됩니다.
제가 아래에 쿠키를 생성한 이유는 대용량 데이터 다운로드를 진행하던중 다운로드 완료 체크가 안되어
쿠키를 생성하여 자바스크립트로 매초마다 쿠키를 체크하여 다운로드 유무를 확인하기 위함입니다.
참고하여 주시길 바랍니다.
감사합니다.
반응형
'개발 > Spring' 카테고리의 다른 글
[Spring boot] embedded mongodb replica 설정 (0) | 2022.02.09 |
---|---|
[Spring] poi 병목현상 해결! (0) | 2020.11.12 |
[Spring] 파일 정보를 못가져오는 에러! MultipartFile에 Xss Filter적용 (0) | 2020.10.30 |
[Spring] 스프링부트 시큐리티를 이용한 로그인! (0) | 2020.10.19 |
[Spring] FCM 을 이용한 비동기 전송 (1) | 2020.09.05 |