티스토리 뷰

엑셀은 컴퓨터에 없어서는 안될 극강의 필수 프로그램중 하나이다. 왠만히 복잡하다고 하는 계산들도 엑셀로는 한줄로 간단히 만들수도 있는, 또한 실무에서는 일종의 DB 역할을 하면서 각종 보고서의 원천 데이터가 되기도 한다. 이런 엑셀을 자바에서 읽고 싶어하는 이유는 너무 많을 수 밖에 없다. POI 라는 엑셀을 다룰 수 있는 자바 API 제공하는 프로젝트이다. 직접 사이트를 방문하여 다운받아도 되고, MAVEN 을 이용하실분을 그리하시면 될듯.


http://poi.apache.org/


JAR 를 받아 자바프로젝트에 참조해놓는다. MAVEN 을 사용하지 않은 때라.. lib 폴더에 넣어놓고 참조했었다. 버전은 좀 예전거 같은데 상관말고 최신버전으로 받아서 참조걸면 된다. 엑셀은 원하는 위치에 넣어놓고 절대경로로 지정할 수는 있으나, 상대경로로 하고 싶다면 프로젝트 폴더에 바로 넣어놓는 것이 좋다. 엑셀 파일명은 CashFlowTable.xlsx




엑셀파일은 아래와 같다.

뭔가 유효이자율 구하는 모듈을 만들었을때, 사용하던 엑셀같은데 기억이 가물..





엑셀 내용이야 어쨋든 상관없이,

POI 프로젝트를 이용하여 엑셀을 읽어 LIST 객체에 담아보자.

// 엑셀파일
File file = new File("./CashFlowTable.xlsx");

// 엑셀 파일 오픈
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(file));

// HashMap 으로 이루어진 List 객체 생성 
List<HashMap<String, Object>> listCashflow = new ArrayList<HashMap<String, Object>>();

for (Row row : wb.getSheetAt(0)) {

	// C2 셀에 있는 명목이자율 읽어온다.
	if (row.getRowNum() == 1) {
		this.rate = row.getCell(2).getNumericCellValue();
		continue;
	}

	// 현 엑셀양식상, 위의 3줄은 건너뛴다.
	if (row.getRowNum() < 3) {
		continue;
	}

	HashMap<String, Object> hmCashFlow = new HashMap<String, Object>();
	hmCashFlow.put("bal", new BigDecimal((row.getCell(2)).getNumericCellValue()));
	hmCashFlow.put("interest", new BigDecimal((row.getCell(3)).getNumericCellValue()));
	hmCashFlow.put("fee", new BigDecimal((row.getCell(4)).getNumericCellValue()));

	listCashflow.add(hmCashFlow);
}


sample_poi.txt


정말 쉽다. 객체선언 몇번 만으로도 엑셀을 자유자재로 읽어들일 수 있게 된다. 2007 이상버전이라서 xlsx 파일이므로, XSSFWorkBook 객체를 사용해야한다. 2003 이전버전은 HSSF 를 사용해야한다. 간단한 예제만으로도 쉽게 구현이 가능하므로 POI 홈페이지를 참조하는 것이 가장 좋다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함