프로그래밍/JAVA&J2EE

엑셀의 내용을 도메인에 셋팅하는 유틸리티 클래스

모지사바하 2014. 8. 14. 15:13

엑셀의 내용을 도메인클래스에 셋팅하는 유틸리티 클래스를 만들어보았습니다.


우선 메소드는 아래와 같습니다.


/**

* @param excelFile : 읽어들일 엑셀파일

* @param clazz : 읽어들인 엑셀파일의 내용을 셋팅할 Domain 클래스

* @return 읽어들인 엑셀파일의 내용이 셋팅된 Domain 클래스 리스트

 */

public static <T> List<T> excelToDomain(File excelFile, Class<T> clazz)



만들면서 발생했던 이슈는,


처음에는 Domain 클래스의 setter 메소드를 엑셀의 셀의 순서대로 호출하는 것이였습니다.


이렇게 엑셀 데이터를 순차적으로 setter 메소드에 Reflection을 사용하여 셋팅하려 했습니다.


그런데 이 방법은 너무 위험해보였습니다.


하여,


public @interface ExcelOrder {

int value();

}


위와 같은 어노테이션을 만들고 엑셀의 데이터가 셋팅될 setter 메소드에 위의 에노테이션을 선언해주도록 했습니다.


@ExcelOrder(value=1)

public void setProcDt( Date procDt ){

this.procDt = procDt;

}

이런식으로요 ..


여기서 @ExcelOrder 의 value 값에 따라 셀의 값이 셋팅이 되도록 했습니다.


value 가 1 이면 A셀의 값이, 2 이면 B셀의 값이 셋팅되도록 했습니다.



처음에는 @ExcelOrder 어노테이션이 선언된 메소드를 추출하여, value 값에 따라 comparator 를 구현하여 sorting 되도록 했는데,  생각해보니 value 를 키로, Method 를 value 로 한 Map 이 더 나은것 같아서 변경했습니다.





최종적으로 테스트해보니 잘 돌아가네요 .. ㅎㅎ 


소스를 업로드합니다.



CellConverter.java


DefaultCellConverter.java


ExcelConverter.java


ExcelOrder.java


필요하신분은 가져가셔서 사용하세요 ~


프로젝트가 스프링프레임워크 기반이여서 스프링에서 제공되는 각종 유틸리티 클래스를 사용하였습니다. 

엑셀 라이브러리는 아파치 포이 사용하였구요.