[Java] Apache POI로 Excel 사용

후니·2024년 2월 7일
0

Java

목록 보기
3/5

✨ Apache POI란?

Apache POI는 아파치 소프트웨어 재단에서 만든 라이브러리로,
마이크로소프트 오피스 파일 포맷을 순수 자바 언어로써 읽고 쓰는 기능을 제공한다.

JDK 호환성

  • 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+

1. Pom.xml 의존성 주입

<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 안에 있는 행과 열 의미

✨ Excel 파일 생성

Apache poi 를 사용한 Excel 파일 생성 코드 진행 순서

  • Workbook 생성
  • Workbook 내 sheet 생성
  • sheet 내 Row 생성
  • 하나의 Row에 여러개의 cell 생성 (하나의 행에 여러 열 생성)
  • 3과 4 과정 반복

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();
            }
        }
    }

Console 출력

profile
Developer

0개의 댓글