<Maven 라이브러리> apache.poi 이용해서 엑셀 파일 읽어오기

2021. 9. 14. 22:11JAVA

반응형

엑셀 파일을 Maven의 오픈 라이브러리 apache.poi를 이용해서 읽어오기.

 

1.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>

from 위키 백과

라고 한다.

 

2. Maven 의존성 업데이트 한번 해주고

 

3. 자바 클래스를 하나 만들고 아래의 내용을 이용한다

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

    }
}

대략적으로 정리해보자면,

1. FileInputStream으로 엑셀 파일 가져오고,

2. workbook 으로 엑셀 파일 밑에 시트 가져오고,

3. 시트로부터 행 가져오고

4. 행으로 부터 셀 하나씩 가져와서

5. 비어있다면, 건너뛰고, 

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

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

 

'JAVA' 카테고리의 다른 글

[spring boot]이미지 업로드  (0) 2022.03.21
추상 클래스와 인터페이스  (0) 2022.03.14
[JPA]REST API 만들기  (0) 2022.03.01
OracleDB - JAVA  (0) 2021.09.22