ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 엑셀 (excel) 파일 read 하는 법 (.xls, .xlsx)
    Programming/JAVA 2019. 12. 4. 17:03

    →가끔 JAVA 단에서 엑셀에 있는 데이터들을 가공하거나 가져와야 할 일들이 생긴다. 

    그럴 때 엑셀파일을 읽어오는 방법을 한번 해보려고 한다.

    일단 가져올 엑셀에 있는 컬럼들을 위한 VO class를 하나 만들어 준다.

     

    나는 여기서 getter와 setter를 위해 lombok을 사용할 건데 lombok에 대한 내용은 아래 포스팅 확인!

    https://100winone.tistory.com/11

     

    [SpringBoot] Lombok 사용 및 적용 방법

    Lombok 라이브러리는 자바 개발을 getter와 setter, 혹은 toString 메소드를 만들일이 생긴다. 위에 getter, setter, toString은 주로 변수가 쉽게 값에 접근하지 못하게 하기위해 private으로 선언되어 있을 때..

    100winone.tistory.com

    // addressVO
    
    import lombok.Data;
    
    @Data
    public class addressVO {
        private String pName; // 이름
        private String pPart; // 부서
        private String pMail; // email
        }
    

    @Data 어노테이션을 써줌으로써 getter, setter, toString등이 자동으로 생성된다. lombok을 쓰기 싫다면 단축키  Alt+Shift+S를 누르고 getter and setter를 generate 해주면 된다!!

     

    이제 직접 동작하는 코드를 살펴보겠다.

     

    	private static ArrayList<addressVO> readexcel() {
    		System.out.println("readexcel method");
            String path = "D:\\workspace\\01.workspace\\exceladdress.xls";
            ArrayList<addressVO> addList = new ArrayList<addressVO>();
            try {
                File file = new File(path);
                FileInputStream inputStream = new FileInputStream(file);
                HSSFWorkbook hworkbook = new HSSFWorkbook(inputStream); // 2007 이전 버전(xls파일)
                //XSSFWorkbook hworkbook = new HSSFWorkbook(inputStream); // 2007 이후 버전(xlsx파일)
                
                HSSFSheet curSheet; // 현재 sheet
                HSSFCell curCell; // 현재 cell
                HSSFRow curRow; // 현재 row
                
                int sheetNumber = hworkbook.getNumberOfSheets(); // 엑셀 Sheet 총 갯수
                //System.out.println("sheetNumber : "+sheetNumber);  Sheet 갯수 확인
                while (sheetNumber != 0) {
                    sheetNumber--;
                    curSheet = hworkbook.getSheetAt(sheetNumber);
                    int row = curSheet.getPhysicalNumberOfRows();
                    //System.out.println(row); 현재 sheet의 row 갯수 확인
                    for (int i = 1; i < row; i++) {
                    	addressVO vo = new addressVO();
                        curRow = curSheet.getRow(i);        
                        vo.setPPart(String.valueOf(curRow.getCell(0)));
                        vo.setPName(String.valueOf(curRow.getCell(1)));
                        vo.setPMail(String.valueOf(curRow.getCell(2)));
                        addList.add(vo);
                    }
                }
                hworkbook.close();
            } catch (FileNotFoundException e) {
            	LOGGER.error("File을 찾을 수 없습니다.", e);
            } catch (IOException e) {
            	LOGGER.error("예외가 발생했습니다.", e);
            }
            return addList;
        }

    path 에 읽어들일 엑셀 파일의 경로를 입력한다

     

     HSSFWorkbook hworkbook = new HSSFWorkbook(inputStream); // 2007 이전 버전(xls파일)
     XSSFWorkbook hworkbook = new HSSFWorkbook(inputStream); // 2007 이후 버전(xlsx파일)

    아래로 내려가보면 위 코드 두 줄이 있다. 본인의 엑셀파일에 맞는 확장자를 써주면 된다!

    본인 기준 .xls 파일은 동작했다.

     

    while문 내부 for문에서 VO 객체에 맞게 본인의 엑셀파일에 있는 컬럼명과 매치시켜준다. 

    vo.setPPart(String.valueOf(curRow.getCell(0))) // curRow.getCell(숫자) 숫자 부분에 컬럼에 맞는 열 번호를 넣어주고 콘솔에 찍어보면 확인 가능하다. 

    마지막에 vo 형식의 list에 하나씩 넣어주면 된다.

     

    이제 main 코드에서 호출부를 살펴보겠다.

    public static void main(String[] args) throws Exception {
    		SpringApplication.run(AddressApplication.class, args);
            String jsonExcel = "";
    		ArrayList<addressVO> list = new ArrayList<addressVO>();
            list = readexcel();
            jsonExcel = CommonVariable.gson.toJson(list); // json 형태로 변환
            System.out.println(jsonExcel);
            }

    main에서 json형태(속성 : 값)로 바꿔준 후 출력을 찍어보면 아래 사진처럼 잘 나온다! 

    그럼 안녕~!!

    'Programming > JAVA' 카테고리의 다른 글

    [JAVA] 생성자 JAVA Constructor  (0) 2019.11.29
    [JAVA] 페이징 처리  (1) 2019.11.25
    [JAVA] Exception 처리  (0) 2019.11.19
Designed by Tistory.