Java Excel(엑셀) 데이터 처리하기(Apache POI), Excel(엑셀) 다운로드, Excel 생성
Apache POI 라이브러리를 이용하여 간단하게 Excel 파일을 생성 하거나 수정 할 수 있습니다.
간단하게 적용하는 방법을 포스팅 했습니다.
Java 또는 Spring 중 적용하고 싶은 라이브러리 택1 하여, 적용한다.
Java의 jar는 1-1, jar 다운로드, spring의 의존성 추가의 경우 1-2
1-1. Java jar 추가하기
공식 홈페이지 src 예제 코드 및 jar파일을 다운로드 할 수 있다.
https://poi.apache.org/download.html
라이브러리 다운로드 (일반 poi-bin-x.x.x-날짜.zip)
https://archive.apache.org/dist/poi/release/bin/
1-2.의존성 추가하기
https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
Maven
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.0</version>
</dependency>
Gradle
implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '5.2.0'
만약 HSSWorkbook 생성자를 이용하여 처리하고 싶다면 poi-ooxml이 아닌 poi를 사용하시면 됩니다. 현재 포스팅 코드는 XSSFWorkbook 생성자를 이용하여 처리하였습니다.
Java 예제 코드는 다음과 같습니다.
public void createExcel(List<Map<String, Object>> params) throws Exception{
/*
Excel workbook 생성
HSSFWorkbook 엑셀 97 ~ 2003
XSSFWorkbook 2007 ~
*/
Workbook workbook = new XSSFWorkbook();
// Excel sheet 생성
Sheet sheet = workbook.createSheet("Sheet_test");
// Excel Data Row-Cell 생성
for(int i = 0; i < params.size(); i++){
Row row = sheet.createRow(i); // Row 생성
Iterator iterator = params.get(i).entrySet().iterator();
int cellIndex = 0;
// 값 처리
while(iterator.hasNext()){
Map.Entry entry = (Map.Entry) iterator.next();
String value = (String)entry.getValue();
Cell cell = row.createCell(cellIndex);
cell.setCellValue(value);
cellIndex++;
}
}
OutputStream outputStream = new FileOutputStream("test.xlsx");
workbook.write(outputStream);
workbook.close();
}
데이터의 경우 List<Map<String, Object>>를 이용하여 처리하였습니다. 실제 화면에서 Json Array data를 받아 해당 List 값의 Map기반의 data를 Iterator를 이용하여 값을 추출 하였습니다.
그리고 엑셀 처리 방식은 Workbook 선언 후, 선언 한 Workbook 변수에 Sheet를 생성하여, Data 만큼 Row를 만들어 해당 Index Cell에 value값을 추가하였습니다.
Excel을 생성하는 코드를 보면 인터페이스로 이루어져 있습니다.
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet_test");
Row row = sheet.createRow(i);
Cell cell = row.createCell(cellIndex);
간단하게 Workbook 인터페이스는 파일, Sheet 인터페이스는 엑셀의 시트 Row 인터페이스는 엑셀의 Row, Cell 인터페이스는 해당 Row의 해당 Cell 값으로 표현 됩니다.
※만약 column 데이터를 추가하고 싶다면 Row index 0번을 column 값으로 처리하여 Row index 1번 부터 Data 처리하면 됩니다. 예시 코드는 다음과 같습니다.
// Excel column index
Row row = sheet.createRow(0);
List<String> list = new ArrayList<String>();
// column value
for(int i = 0; i < list.size(); i++){
Cell cell = row.createCell(i);
cell.setCellValue(value);
}
// data value
....
또는 색상같은 Cell에 스타일을 추가하고 싶다면
XSSFCellStyle style = (XSSFCellStyle) workbook.createCellStyle();
style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// Cell Style 효과
cell.setCellStyle(style);
XSSFCellStyle 클래스를 이용하여 해당 필요한 style 속성을 추가 한 후, 해당 Cell에 적용시키면 됩니다. 위 코드의 경우 Cell의 채우기 색상을 GREY_40_PERCENT로 적용 하였습니다.
테스트 결과는 다음과 같습니다.