TIL(24.01.24)Apache POI

DongJun·2024년 1월 24일

Today-I-Learn

목록 보기
38/40
post-thumbnail

💡Apache POI

자바에서 엑셀을 다루기위해선 아파치 재단에서 만든 POI라는 라이브러리를 사용합니다.

Pom.xml 파일의 의존성에 poi와 poi-ooxml을 추가해줍니다.

<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. FileInputStream으로 엑셀 파일 가져옵니다.

2. workbook 으로 엑셀 파일 밑에 시트 가져옵니다.

3. 시트로부터 행 가져옵니다.

4. 행으로 부터 셀 하나씩 가져옵니다.

5. 비어있다면, 건너뜁니다.

6. 값이 있다면 스트링으로 변환해서 출력합니다.

7. 이후 모든 값을 받아올때까지 반복합니다.

import java.io.*;


import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelEx {

    public static void main(String[] args){



        try {
            //파일 읽어오기
            FileInputStream fin = new FileInputStream("엑셀 파일 경로");

            // 해당 엑셀 파일의 시트 가져오기
            XSSFWorkbook workbook = new XSSFWorkbook(fin);

            //시트 갯수
            int seetNum = workbook.getNumberOfSheets();

            //시트갯수 만큼 for문
            for(int i=0; i<seetNum; i++){
                //순서대로 하나씩 받아와줌
                XSSFSheet sheet = workbook.getSheetAt(i);

                //시트 아래에 있는 행의 갯수
                int rows = sheet.getPhysicalNumberOfRows();

                //행 갯수 만큼 만큼 for문
                for(int j=0; j<rows; j++){
                    //한 행 씩 받아옴
                    XSSFRow row = sheet.getRow(j);

                    //행 안에 있는 셀의 갯수
                    int cells = row.getPhysicalNumberOfCells();

                    for(int k=0; k<cells; k++){
                        //순서대로 받아옴
                        XSSFCell cell = row.getCell(k);

                        //스트링으로 받아오기 위한 준비
                        String value = "";
                        //셀의 내용이 없다면 건너뛰고
                        if(cell == null){
                            continue;
                        }else{
                            //스위치문을 이용해, 셀의 타입에 따라 가져오는 방법이 다름.
                            switch (cell.getCellType()){
                                case FORMULA:
                                    value = cell.getCellFormula();
                                    break;
                                case NUMERIC:
                                    value = cell.getNumericCellValue()+"";
                                    break;
                                case STRING:
                                    value = cell.getStringCellValue()+"";
                                    break;
                                case BLANK:
                                    value = cell.getBooleanCellValue()+"";
                                case ERROR:
                                    value = cell.getErrorCellValue()+"";
                                    break;
                            }
                        }
                        //받아온 값을 뿌림.
                        System.out.println(j +"번 행, " + k +"번 열 값 : "+ value);

                    }
                }
            }
        //예외 처리
        }catch (IOException e){
            System.out.println("Error");
        }

    }
}
profile
성장하기위한 나만의 방법을 꾸준히 찾는중! 협동적 & 성실한 Frontend 개발자를 목표로…

0개의 댓글