๋ฐ์ํ
1.pom.xml์ dependency ์ถ๊ฐ
<!-- # excel ๋ค์ด๋ก๋ -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
2.DTO ๋ง๋ค๊ธฐ
// StudentGradeDTO.java
package com.example.demo.student.dto;
import lombok.Data;
@Data
public class StudentGradeDTO {
private String name;
private String subject;
private double score;
}
3.๊ณตํต Excel Export ์ ํธ ๋ง๋ค๊ธฐ
// ExcelExporter.java
package com.example.demo.global.excel;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.function.Function;
public class ExcelExporter {
public static <T> void exportListToExcel(List<T> dataList, String[] headers,
Function<T, List<String>> rowMapper,
String sheetName, String fileName,
HttpServletResponse response) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet(sheetName);
Row headerRow = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
headerRow.createCell(i).setCellValue(headers[i]);
}
int rowNum = 1;
for (T item : dataList) {
Row row = sheet.createRow(rowNum++);
List<String> cellValues = rowMapper.apply(item);
for (int i = 0; i < cellValues.size(); i++) {
row.createCell(i).setCellValue(cellValues.get(i));
}
}
String encodedFileName = URLEncoder.encode(fileName, "UTF-8");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");
workbook.write(response.getOutputStream());
workbook.close();
}
}
4.Controller - ์์ ๋ค์ด๋ก๋ ์๋ํฌ์ธํธ
// StudentController.java
package com.example.demo.student.controller;
import com.example.demo.global.excel.ExcelExporter;
import com.example.demo.student.dto.StudentGradeDTO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.time.LocalDate;
import java.util.List;
@RestController
public class StudentController {
@GetMapping("/api/students/excel")
public void downloadExcel(HttpServletResponse response) throws IOException {
List<StudentGradeDTO> list = List.of(
create("๊น์ํฌ", "๊ตญ์ด", 88.5),
create("์ด์ฒ ์", "์ํ", 92.0),
create("ํ๊ธธ๋", "์์ด", 76.5)
);
String[] headers = {"์ด๋ฆ", "๊ณผ๋ชฉ", "์ ์"};
ExcelExporter.exportListToExcel(
list,
headers,
dto -> List.of(
dto.getName(),
dto.getSubject(),
String.valueOf(dto.getScore())
),
"ํ์ ์ฑ์ ํ",
"์ฑ์ ํ_" + LocalDate.now() + ".xlsx",
response
);
}
private StudentGradeDTO create(String name, String subject, double score) {
StudentGradeDTO dto = new StudentGradeDTO();
dto.setName(name);
dto.setSubject(subject);
dto.setScore(score);
return dto;
}
}
์์ ๋ด์ฉ
Sheet1: ํ์ ์ฑ์ ํ
| ์ด๋ฆ | ๊ณผ๋ชฉ | ์ ์ |
|--------|------|--------|
| ๊น์ํฌ | ๊ตญ์ด | 88.5 |
| ์ด์ฒ ์ | ์ํ | 92.0 |
| ํ๊ธธ๋ | ์์ด | 76.5 |
๋ฐ์ํ