Apache POI는 아파치 소프트웨어 재단에서 만든 라이브러리로,
마이크로소프트 오피스 파일 포맷을 순수 자바 언어로써 읽고 쓰는 기능을 제공한다.
- POI 4.0 and later require JDK version 1.8 or later.
- POI 3.11 and later 3.x versions require JDK version 1.6 or later.
- POI 3.5 to 3.10 required the JDK version 1.5 or later.
- Versions prior to 3.5 required JDK 1.4+
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
</dependencies>
1) Apache POI의 주요 클래스들은 주로 HSSF, XSSF로 시작한다.
- HSSF
- Excel 97(-2007) 파일 포맷시 사용
- ex) HSSFWorkbook, **HSSFSheet
- XSSF
- Excel 2007 OOXML (*.xlsx) 파일 포맷시 사용
- ex) XSSFWorkbook, XSSFSheet
2) Workbook, Sheet, Row, Cell
- WorkBook - 하나의 엑셀 파일 의미
- Sheet - 엑셀파일(= Workbook)의 시트 의미
- Row, Cell - Sheet 안에 있는 행과 열 의미
Apache poi 를 사용한 Excel 파일 생성 코드 진행 순서
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class PoiMakeExcel {
public static String filePath = "/User/test/poi_temp";
public static String fileNm = "poi_making_file_test.xlsx";
public static void main(String[] args) {
// 빈 Workbook 생성
HSSFWorkbook workbook = new HSSFWorkbook();
// 빈 Sheet 생성
HSSFSheet sheet = workbook.createSheet("employee data");
// Sheet를 채우기 위한 데이터들을 Map에 저장
Map<String, Object> data = new TreeMap<>();
data.put("1", new Object[]{"ID", "NAME", "PHONE_NUMBER"});
data.put("2", new Object[]{"1", "cookie", "010-1111-1111"});
data.put("3", new Object[]{"2", "sickBBang", "010-2222-2222"});
data.put("4", new Object[]{"3", "workingAnt", "010-3333-3333"});
data.put("5", new Object[]{"4", "wow", "010-4444-4444"});
// data에서 KeySet을 가져온다. 이 Set 값들을 조회하면서 데이터들을 Sheet에 입력한다.
Set<String> keyset = data.keySet();
int rownum = 0;
// TreeMap을 통해 생성된 keySet은 for 반복문을 통해 조회시, 키값이 오름차순으로 조회된다.
for (String key : keyset) {
Row row = sheet.createRow(rownum++);
Object[] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr) {
Cell cell = row.createCell(cellnum++);
if (obj instanceof String) {
cell.setCellValue((String)obj);
}else if (obj instanceof Integer) {
cell.setCellValue((Integer)obj);
}
}
}
try (FileOutputStream out = new FileOutputStream(new File(filePath, fileNm))) {
workbook.write(out);
}catch (IOException e) {
e.printStackTrace();
}
}
}
