Apache POI
Apache POI는 아파치 소프트웨어 재단에서 만든 라이브러리이다.
MS Office 파일 포맷을 순수 Java 언어로 읽고 쓰는 기능을 제공한다.
이 글에서는 단순히 Cell과 Row를 다뤄서 Column, Row 형식의 Excel 파일을 만들고, 유저가 다운로드할 수 있도록 하는 방법을 다룬다.
개발환경 세팅
개발 환경
- Java 1.8
- SpringBoot 2.7.10
- gradle
build.gradle
Apache POI
implementation 'org.apache.poi:poi-ooxml:5.2.3'
jackson
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.3'
SpringBoot 세팅
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
Apache POI 라이브러리 사용법
Excel File 만들기
우선 WorkBook을 생성하고, Sheet를 생성한다.
생성된 Sheet의 각 행 별로 데이터를 쓰는 형태이다.
String fileName = "example.xlsx"; //파일 명
List<String> headers = getHeaderData(); //헤더 데이터
List<List<String>> rows = getRowDatas(); // row 데이터 List
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet(fileName); //excel 파일 생성
//Setting Headers
Row headerRow = sheet.createRow(0); //0번째 줄 생성 - 헤더(맨 윗줄)
for (int i = 0; i < headers.size(); i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers.get(i));
}
//Setting Datas
for (int i = 1; i <= rows.size(); i++) { // 1번째 줄부터
Row row = sheet.createRow(i);
List<String> data = rows.get(i);
for (int j = 0; j < data.size(); j++) {
Cell cell = row.createCell(j);
cell.setCellValue(data.get(j));
}
}
// return workbook;
sheet.createRow(n) 으로 sheet의 n번째 row에 데이터를 쓸 수 있도록 Row 객체를 생성한다.
Row 객체에 row.createCell(n)으로 해당 row의 n번째 cell에 데이터를 쓴다.
ByteArrayOutputStream에 쓰기
ByteArrayOutputStream에 해당 workbook의 데이터를 쓸 수 있다.
여기서 생성된 byte Array가 곧 Excel File이라고 생각하면 된다.
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
workbook.write(outputStream);
workbook.close();
} catch (IOException e) {
log.error(e.getMessage());
e.printStackTrace();
}
byte[] excelBytes = outputStream.toByteArray();
ResponseEntity 반환 방식
HTTP Header에 APPLICATION_OCTET_STREAM으로 반환 데이터가 ExcelFile이라는 것을 명시해줘야 한다.
이후, body에 byte[] excelFile 데이터를 그대로 return 하면, 엑셀 파일이 전송된다.
//data json 형식을 받아서 .xlsx 파일로 변환
@PostMapping("/api/convert/excel")
public ResponseEntity<byte[] convertJsonToXlsx(@RequestBody String json) throws IOException {
//convert json to excel
String fileName = "example.xlsx";
byte[] excelFile = excelService.createExcelFile(json);//엑셀 파일
//HTTP Header 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
return ResponseEntity.ok()
.headers(headers)
.body(excelFile);
}
만약 User가 브라우저에서 해당 API를 호출한다면, 브라우저에서 바로 해당 Excel File이 다운로드된다.
반응형
'Tool & Library' 카테고리의 다른 글
[SonarQube] 오픈소스 정적분석 Tool 소나큐브 사용법 (0) | 2024.09.19 |
---|---|
[SchemaSpy] DB 스키마 분석, 시각화 Tool 사용 방법 (0) | 2024.07.02 |