Java Apache POI를 사용하기 위해선 maven
또는 gradle
에 라이브러리를 추가해주어야 한다!
(나는 4.1.2버전을 추가해주었다.)
https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
// https://mvnrepository.com/artifact/org.apache.poi/poi
implementation 'org.apache.poi:poi:4.1.2'
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
implementation 'org.apache.poi:poi-ooxml:4.1.2'
📌 Apache POI Common
📌 Apache POI API Based On OPC and OOXML Schemas
Workbook workbook = new XSSWorkbook();
Sheet sheet1 = workbook.createSheet();
Sheet sheet2 = workbook.createSheet("시트명");
이렇게 하게 되면 workbook
이 만들어지고,
workbook.createSheet();
를 하게 되면 workbook
안에 시트가 생성된다.
시트명을 입력하게 되면 해당 시트명으로 시트가 생성되고 입력하지 않으면 defalut
로 "Sheet1
"이라는 이름으로 시트가 생성된다.
시트 안에는 Row
(행)가 있다.
// 내가 원하는 시트의 행을 만들어줄 수 있다.
Row row = sheet1.createRow(0);
// 해당 시트의 마지막 행의 인덱스를 가져올 수 있다.
Row row = sheet1.createRow(sheet1.getLastRowNum());
// 만약 반복문을 사용하여 행을 추가하고 싶다면
// sheet1.getLastRowNum() + 1 로 계속 해서 추가하면서 행을 만들 수 있다.
Row row = sheet1.createRow(sheet1.getLastRowNum() + 1);
행을 추가한 뒤, 행 안에 Cell
을 만들어준다.
row.createCell(index).setCellValue(value);
createCell()
안에는 index
를 넣어준다. (0부터 시작)
setCellValue()
안에는 Cell
안에 넣을 값을 넣어준다.
row.createCell(0).setCellValue("value1");
row.createCell(1).setCellValue("value1");
row.createCell(2).setCellValue("value1");
row.createCell(3).setCellValue("value1");
row.createCell(4).setCellValue("value1");
row.createCell(5).setCellValue("value1");
row.createCell(6).setCellValue("value1");
row.createCell(7).setCellValue("value1");
row.createCell(8).setCellValue("value1");
이렇게 하게 되면 중간에 값을 넣을 때, 뒤에 Cell
index
까지 바꿔주어야하기 때문에 index
에 고정적인 int
를 넣지 않는다.
int cellIdx = 0;
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx).setCellValue("value1");
0
으로 초기화한 cellIdx
라는 변수를 만들어서 넣어주면 중간에 다른 값을 넣더라도 뒤에 index
는 바꾸지 않아도 된다.
List<UserDto> userDtoList = (어떠한 List);
Workbook workbook = new XSSWorkbook();
Sheet sheet1 = workbook.createSheet();
for (UserDto dto : userDtoList) {
Row row = sheet1.createRow(sheet1.getLastRowNum() + 1);
int cellIdx = 0;
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx++).setCellValue("value1");
row.createCell(cellIdx).setCellValue("value1");
}
try (FileOutputStream outputStream = new FileOutputStream("C:\\document\\poi_test.xlsx")) {
workbook.write(outputStream);
}
workbook.close();
마지막으로 엑셀을 모두 완성했으면 FileOutputStream
으로 해당 경로에 파일을 만들고 파일을 닫아준다.
(아주 중요!) 없으면 엑셀이 생성되지 않다.
간단하게 끝!