Programming/Java

[Java]Apache POI로 Java에서 Excel 내용 읽기

라우드니스 2010. 11. 16. 20:40

= Apache POI? =


워드나 파워포인트, 엑셀에 저장한 데이터를 Java로 가지고 와서 사용하는 패키지.

기능 상 제약이 많지만, 경우에 따라서 유용하게 사용할 수 있습니다.

엑셀만이라면 Jxl 이라는 패키지도 존재하지만 android에서는 jxl을 사용할 경우 한글을 제대로 가지고 오지 못하여 apache POI를 사용해야 합니다.

안드로이드에서 테스트 몇 번 해본 거 뿐이라서 한글 문제점을 해결할 수 있다면 (혹은 한글을 사용하지 않는다면) jxl을 사용하는것도 좋습니다.

2010년 11월 12일 기준 bin 압축 파일 중 poi-3.7-20101029.jar 파일이 관련 API를 가지고 있는 jar 파일입니다.

= 엑셀에서 내용읽기 =
...
import org.apache.poi.hssf.usermodel.*;
...
 
//여러가지 타입으로 파일을 읽을 수 있는데
//android 내부에서 파일을 가지고 오는
//getResources().openRawResource(R.raw.파일이름)
//은 inputstream입니다. 물론 이것도 구현되어 있습니다.

        HSSFWorkbook workbook = null; //엑셀을 읽어오는 Workbook 객체 생성
	workbook = new HSSFWorkbook(inputstream); //객체에 파일 넣기.
	HSSFSheet sheet = workbook.getSheetAt(0); //Sheet도 0번부터 시작합니다.

//apache poi의 단점은 엑셀의 row,column의 size를 받아올 수 없는것 같습니다...
//(아마 방법이 있을 거 같긴 하지만, 모르겠네요.)
	String[][] data = new String[40][40];
	for(int i = 0 ; i < 13 ; i++){
	HSSFRow row = sheet.getRow(i);  //이런 방식으로 sheet의 row를 가지고 온 후
		for(int j = 0 ; j < 13 ; j++){
			HSSFCell cell = row.getCell(j); //row에서 cell을 읽은 방식으로 사용합니다.
			if(cell != null) { //jxl은 cell이 비였을 경우 "" (nil)을, poi는 null로 인식하므로 null인지 판단 해줘야 합니다.
				if( cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){ //숫자일 경우 double 타입의 숫자로 가지고 오는 별도의 함수가 존재합니다. 이를 판단해 줍시다.
					data[j][i] = String.valueOf( cell.getNumericCellValue());
				} else {
					data[j][i] = cell.getStringCellValue();
				}
			} else {
				data[j][i] = "";
			}
		}
	}
반응형