자바로 엑셀를 다뤄보자(2)-엑셀 읽어들이기

0

읽을 엑셀파일


혹시라도 집에 엑셀이 없다면 구글시트를 사용해서 생성해두 됩니다 다운로드할때 xlsx로 해줘야함

여튼 얘를 읽어서 콘솔에다 띄워보겠슴다

엑셀 파일을 프로젝트에 넣기

방금 만들어둔 엑셀 파일을 프로젝트에 넣어줍니다

제 엑셀 파일 이름은 read로 했습니다

클래스 생성

우선 제일 먼저 FileInputStream와 Workbook를 사용해줍니다

new File에 방금 넣은 엑셀 파일이 있는 경로를 넣어주면 됩니당

FileInputStream

FileInputStream은 1바이트씩 읽어준다
하지만 UTF-8로 인코딩된 문자열을 3바이트이기 때문에 하나씩 읽어와버리면
문자는 깨지게 되어있는데 어떻게 정상적으로 출력시켜주는걸까 라고 생각할 수 있다

Workbook

위에서 FileInputStream으로 읽어들인 원시 바이트를

WorkbookFactory.create()를 통해 전달된다
Apache POI 라이브러리는 이 원시 바이트를 이용해 엑셀 파일의 내용을 해석할 수 있음 Apache POI라이브러리는 엑셀 파일 형식을 알고 있기 때문에 파일의 내부 구조를 이해하고 데이터를 올바르게 추출이 가능함 따라서 원시 바이트가 어떤 방식으로 인코딩 되었는지도 알 수 있고 멀티바이트 문자 예를들어 3바이트 한글문자도 문자가 깨지지 않고 직접 처리함 그래서 따로 InputStreamReader를 사용하지 않고 따로 문자 인코딩을 처리할 필요가 없다 이 역할은 Apache POI 라이브러리가 대신 해준다

try-catch

FileInputStream도 그렇고
WorkbookFactory.create도 지금 컴파일 에러가 뜨는데 그 이유는 try-catch 즉 예외처리를 해주지 않아서이다
예외 처리를 해주어야하는 이유는 파일을 읽어들일때 값이 없을 수도 있어서 해주라고 컴파일러가 말해주고 있다


이렇게 try-catch로 예외 처리해주면 컴파일에러가 사라진다

Sheet sheet = workbook.getSheetAt(0);

이름 그대로 워크북에 있는 시트중에 0번째 시트를 가지고온다
이렇게 하면 시트가 완성되고 현재는 시트가 하나 뿐이라 0을 넣어주면 됩니다

이렇게 시트를 들고 왔으면 이제 행과 열을 출력해줘야한다
행과 열은 하나만 있는게 아니기 때문에 for문을 사용해서 값들을 출력해준다

Row와Cell


이렇게 이중forEach문을 사용하여 행과 열을 받아온다음
toString을 이용하여 출력하면 된다
넘 쉬운거 같다고 느껴진다

결과


하지만 결과를 보면 뭔가 이상하다

ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...

라는 에러도 떠 있고
문자들과와 실수는 제대로 출력이 되었는데
정수는 실수로 되어있고
날짜는 미국식으로 나온다
우리가 원하는건 실수가 아닌 정수 1 2 3 4 5이고
YYYY-MM-DD 이런식인데
다음에 알아보도록하자

0개의 댓글