java/spring

[Spring] 엑셀 다운로드 API

danuri 2022. 8. 4. 14:22

서비스 운영 중 사용자들 편의를 위해 엑셀 파일 다운로드 기능을 제공할 일이 생겨 학습한 내용을 기록한다.

 

라이브러리 추가

둘 중 하나만 추가하면 된다.

HSSFWorkbook은 .xls 확장자, XSSWorkbook은 .xlsx 확장자 전용이라고 한다.

나는 .xlsx인 두 번째 라이브러리만 추가했다.

implementation 'org.apache.poi:poi:5.2.2' // HSSFWorkbook 사용
implementation 'org.apache.poi:poi-ooxml:5.2.2' // XSSFWorkbook 사용

 

컨트롤러

@Controller
@RequiredArgsConstructor
@RequestMapping("/excels")
public class ExcelController {

    private final ExcelService excelService;

    @GetMapping
    public void download(HttpServletResponse response) throws IOException {
        excelService.download(response);
    }
}

 

HttpServletResponse를 인자로 받아야한다.

 

서비스

@Service
@Transactional(readOnly = true)
public class ExcelService {
    
    public void download(HttpServletResponse response) throws IOException {
        Workbook wb = new XSSFWorkbook();
        Sheet sheet = wb.createSheet("첫번째 시트");
        int rowNum = 0;
        Cell cell = null;
        Row row = null;

        // Header
        int cellNum = 0;
        row = sheet.createRow(rowNum++);
        cell = row.createCell(cellNum++);
        cell.setCellValue("번호");
        cell = row.createCell(cellNum++);
        cell.setCellValue("이름");

        // Body
        for (int i = 1; i <= 3; i++) {
            cellNum = 0;
            row = sheet.createRow(rowNum++);
            cell = row.createCell(cellNum++);
            cell.setCellValue(i);
            cell = row.createCell(cellNum++);
            cell.setCellValue("학생" + i);
        }

        // Download
        response.setContentType("ms-vnd/excel");
        response.setHeader("Content-Disposition", "attachment;filename=student.xlsx");
        try {
            wb.write(response.getOutputStream());
        } finally {
            wb.close();
        }
    }
}

구조는 간단하다. Header, Body에 각자 상황에 맞게 적절한 내용을 입력하면 된다.

+) 마지막 wb.write(), wb.close()를 try-finally로 감싸주지 않으면 openxml4jexception이 발생한다.

 

API 호출

크롬같은 웹 브라우저에 다음 url을 입력해보자.

http:localhost:8080/excels

 

 

 

엑셀 파일이 다운받아진다.

 

내용도 잘 입력된 것을 볼 수 있다.

 

 


 

지금까지 엑셀 다운로드 API에 대해 알아보았다. 이 밖에 스타일 등 여러 설정들을 지원하는 것 같다.

현재는 객체들의 리스트를 쫙 뽑아주는 용도로 사용하고 있는데 상당히 유용한 것 같다.

 

참고자료

https://jhhan009.tistory.com/67