안녕하세요 오늘은 Apache poi로 엑셀 다운로드를 하는 로직을 구현해 보도록 하겠습니다
Apache POI는 Excel 파일과 관련된 내용을 처리하기 위해 다른 많은 오픈 소스 라이브러리 중에서 신뢰할 수 있는 라이브러리입니다. 또한 Apache POI 라이브러리를 사용하여 MS Word 및 MS PowerPoint 파일을 읽고 쓸 수 있습니다.
bulid.gradle 파일에 의존성을 추가해줍니다.
implementation group: 'org.apache.poi', name: 'poi', version: '4.1.2'
implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.2'
public static void excelDownload(HttpServletResponse response, List<?> list, @NonNull String fileName) throws Exception{
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet(fileName);
Row row = null;
Cell cell = null;
int rowNum = 0;
int columnNum = 0;
//제목 스타일 지정
CellStyle style1 = wb.createCellStyle();
style1.setAlignment(HorizontalAlignment.CENTER);
style1.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
style1.setFillPattern(FillPatternType.BRICKS);
style1.setBorderRight(BorderStyle.THIN);
style1.setBorderLeft(BorderStyle.THIN);
style1.setBorderTop(BorderStyle.THIN);
style1.setBorderBottom(BorderStyle.THIN);
//리스트 스타일 지정
CellStyle style2 = wb.createCellStyle();
style2.setAlignment(HorizontalAlignment.CENTER);
style2.setBorderRight(BorderStyle.THIN);
style2.setBorderLeft(BorderStyle.THIN);
style2.setBorderTop(BorderStyle.THIN);
style2.setBorderBottom(BorderStyle.THIN);
//vo의 제목 셋팅
row = sheet.createRow(rowNum++);
for(Field field : list.get(0).getClass().getDeclaredFields()){
field.setAccessible(true);
Object value = field.get(list.get(0));
cell = row.createCell(columnNum);
cell.setCellStyle(style1);
cell.setCellValue(field.getName());
columnNum += 1;
}
// vo의 리스트 셋팅
for (int i=0; i<list.size(); i++) {
columnNum = 0;
row = sheet.createRow(rowNum++);
for(Field field : list.get(i).getClass().getDeclaredFields()){
field.setAccessible(true);
Object value = field.get(list.get(i));
cell = row.createCell(columnNum);
cell.setCellStyle(style2);
cell.setCellValue((String)value);
columnNum += 1;
}
}
// 컨텐츠 타입과 파일명 지정
response.setContentType("ms-vnd/excel");
// 정규식 사용하여 파일명에 .@$^공백이 있을경우 _로 대체
fileName = fileName.replaceAll("[.@$^\\s]", "_");
// 헤더에 한글 셋팅
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename="+fileName+".xlsx");
// Excel File Output
wb.write(response.getOutputStream());
wb.close();
}
@GetMapping("/excel/download")
public void excelDownload(HttpServletResponse response) throws Exception {
List<UserVO> list = mainService.getAllUsers();
String excelFileName = "고객 정보";
ExcelUtil.excelDownload(response, list, excelFileName);
}
로직 개발 후 실행결과 고객_정보라는 엑셀파일이 생성된 것을 확인 할수 있었습니다. 다음엔 더 재미있는 소재로 찾아뵙도록 하겠습니다.