본문 바로가기

다우 & Web/JAVA

가장 쉽게 JAVA 엑셀 파일 읽고 쓰기 ( #읽기)

안녕하세요
'개발세끼'의 첫끼 입니다
첫 포스팅인 만큼, 제가 개발한 오픈소스 중 하나인, ToExcel이라는 라이브러리를 소개 해 드리면 어떨까 싶습니다.
이글에서는 첫번째로 엑셀을 읽어 들이는 방법부터 소개 해드릴게요~
우선, 라이브러리를 maven이나 gradle로 임포트 시킬겁니다.
최신 버전의 확인은 아래 링크에서 확인 하시면 될 것 같네요~
-> https://github.com/ckpoint/toexcel
현재 가장 최신 버전인 0.9.2 버전을 기준으로 소개 드릴게요
우선 아래 보이시는 것 처럼 maven이나 gradle dependency 설정을 넣어 주셔야 합니다.

 

MAVEN

<dependency>
  <groupId>com.github.ckpoint</groupId>
  <artifactId>toexcel</artifactId>
  <version>0.9.2</version>
</dependency>
GRADLE
  compile group: 'com.github.ckpoint', name: 'toexcel', version: '0.9.2'

제가 읽어 들이고 싶은 엑셀 파일 포맷은 아래와 같아요~

 

이제 이 엑셀 파일을 읽어와서, Model로 맵핑 시키려고 합니다.

 

public class UserModel {

    private String name;
    private Integer age;
    private Gender gender;
    private String phone;
}

enum Gender {
    남자, 여자;
}

이 상태에서는, 엑셀에서 UserModel의 name, age, gender, phone에 어떤 값들을 넣어야 하는지 판단이 불가능 해보이네요.

아래처럼 @ExcelHeader annotation을 사용해서 엑셀의 어떤 셀들의 값을 가져와야 하는지 명시 해줍니다.

import com.github.ckpoint.toexcel.annotation.ExcelHeader;

public class UserModel {

    @ExcelHeader(headerName = "이름")
    private String name;
    @ExcelHeader(headerName = "나이")
    private Integer age;
    @ExcelHeader(headerName = "성별")
    private Gender gender;
    @ExcelHeader(headerName = "연락처")
    private String phone;
}

enum Gender {
    남자, 여자;
}

자 이제, 엑셀을 읽어들일 준비는 끝났으니,

ToWorkBook 객체를 생성해서 엑셀을 읽어들이고, 저 모델에 데이터를 넣어 보도록 하겠습니다.

 

    ToWorkBook toWorkBook = new ToWorkBook(new File("D:/개발세끼/고객정보.xlsx"));
    ToWorkSheet sheet = toWorkBook.getSheetAt(0);
    List<UserModel> userList = sheet.map(UserModel.class);

 

위 세줄의 코드만으로, 엑셀 데이터를 UserModel에 담는게 끝났습니다.

ToWorkBook의 가장 큰 장점 주의 하나는, 타이틀이 엑셀에 꼭 맨 위의 row에 있을 필요가 없다는 점인데요,

가장 타이틀에 가까운 row를 자동으로 검색해서 기능이 동작 합니다.

위의 코드를 가볍게 설명하자면,

ToWorkBook 객체 생성시, 생성자에 엑셀 파일을 넘겨 주고, (1 line)

읽어들인 워크북의 0번째 sheet를 가져 옵니다. ( 2 line)

가져온 sheet에서 UserModel class로 이루어진 리스트를 가져 옵니다 ( 3 line)

UserModel에 가볍게 tostring함수를 정의해 주고, 아래 코드로 출력해 보면

 

    userList.forEach(user -> log.info(user.toString()));

위와 같은 결과가 출력되는걸 확인 하실 수 있습니다.

정말 간단하죠?