Java 로 Excel(엑셀) 만들기 (Apache POI)

CountryGirl·2024년 8월 26일
0

Java

목록 보기
18/18

Java Apache POI를 사용하기 위해선 maven 또는 gradle에 라이브러리를 추가해주어야 한다!
(나는 4.1.2버전을 추가해주었다.)

🪶 Maven (Apache POI Common ver.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>

🪶 Maven (Apache POI API Based On OPC and OOXML Schemas ver.4.1.2)

<!-- 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>

🐘 Gradle (Apache POI Common ver.4.1.2)

// https://mvnrepository.com/artifact/org.apache.poi/poi
implementation 'org.apache.poi:poi:4.1.2'

🐘 Gradle (Apache POI API Based On OPC and OOXML Schemas ver.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 workbook = new XSSWorkbook();
Sheet sheet1 = workbook.createSheet();
Sheet sheet2 = workbook.createSheet("시트명");

이렇게 하게 되면 workbook이 만들어지고,

workbook.createSheet();

를 하게 되면 workbook 안에 시트가 생성된다.
시트명을 입력하게 되면 해당 시트명으로 시트가 생성되고 입력하지 않으면 defalut로 "Sheet1"이라는 이름으로 시트가 생성된다.


📒 Row 만들기

시트 안에는 Row(행)가 있다.

// 내가 원하는 시트의 행을 만들어줄 수 있다.
Row row = sheet1.createRow(0);

// 해당 시트의 마지막 행의 인덱스를 가져올 수 있다.
Row row = sheet1.createRow(sheet1.getLastRowNum());

// 만약 반복문을 사용하여 행을 추가하고 싶다면
// sheet1.getLastRowNum()  + 1 로 계속 해서 추가하면서 행을 만들 수 있다.
Row row = sheet1.createRow(sheet1.getLastRowNum()  + 1);

행을 추가한 뒤, 행 안에 Cell 을 만들어준다.

📒 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 으로 해당 경로에 파일을 만들고 파일을 닫아준다.
(아주 중요!) 없으면 엑셀이 생성되지 않다.

간단하게 끝!

profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글

관련 채용 정보