Apache POI
- 정의: Microsoft Documents를 사용할 수 있게 해주는 자바 라이브러리
- 기능
1) POIFS Microsoft의 ole2 포맷 형식의 문서를 자바로 읽고 쓸수 있는 컴퍼넌트임. 기본적으로 POI의 모든 컴퍼넌트들이 POIFS를 사용한다.
2) HSSF Microsoft의 엑셀파일을 읽고 쓸 수 있도록 지원하는 컴퍼넌트임
3) HWPF Microsoft의 워드파일을 읽고 쓸 수 있도록 지원하는 컴퍼넌트임(핸들링 단계이기 때문에 아직 사용은 못함)
- 메소드 설명
* org.apache.poi.hssf.usermodel.HSSFCell 의 setCellFormula("formulaString") 메소드는 스프레드시트에 수식을 추가하는데 사용되고, getCellFormula() 메소드는 수식을 대표하는 문자열을 해석하는데 사용된다.
/* xls 파일 출력시 선언 */
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/* xlsx 파일 출력시 선언 */
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
◆ 2003버전 (= if(fileType.equals("xls") )
ArrayList list = new ArrayList();
Hashtable ht = null;
FileInputStream inputStream = new FileInputStream(file);
POIFSFileSystem fileSystem = new POIFSFileSystem(inputStream);
HSSFWorkbook workbook = new HSSFWorkbook(fileSystem); //POISFS를 이용하여 엑셀 워크북 생성
/* xlsx 파일 사용 시(2007 이상 버전)*/
// XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(file));
1) 하나의 시트만 사용할 경우
HSSFSheet sheet = workbook.getSheetAt(0); //첫번째 쉬트
/* xlsx 파일 사용 시(2007 이상 버전)*/
// XSSFSheet sheet = workbook.getSheetAt(0);
2) 두개의 시트 이상 사용할 경우
int sheetNum = workbook.getNumberOfSheets();
for(int s=0; s < sheetNum; s++){
HSSFSheet sheet = workbook.getSheetAt(s);
}
int rows = sheet.getPhysicalNumberOfRows(); // 행개수
for(int i=1; i<rows; i++){ // 생성된 시트를 이용하여 그 행의 수만큼 돌면서 행을 하나씩 생성함
ht = new Hashtable();
HSSFRow row = sheet.getRow(i); //row 가져오기
/* xlsx 파일 사용 시(2007 이상 버전)*/
// XSSFCell cell= row.getCell(c);
if(row!=null){
int count=0;
int cells = row.getPhysicalNumberOfCells(); //셀 개수 가져오기
for(short c=0;c<cells;c++){
HSSFCell cell= row.getCell(c);
if(cell != null){
String value = null;
// 아파치 HSSFCell 에는 모두 6가지의 Cell Type이 있다.
// getCellFormula(): 수식 자체를 가져올 때
// getNumericCellValue():숫자 타입일 때
// getStringCellValue(): 수식 반환값이 문자일 때
// getBooleanCellValue(): 볼룬 타입일 때
// getDateCellValue(): 날짜 타입일 때
// getErrorCellValue(): 에러
switch(cell.getCellType()){ // 각셀의 데이터값을 가져올때 맞는 데이터형으로 변환한다.
case HSSFCell.CELL_TYPE_FORMULA:
value = cell.getCellFormula();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value = String.format("%.5f", cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
value =""+cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
value = null;
break;
case HSSFCell.CELL_TYPE_ERROR:
value=""+cell.getErrorCellValue();
break;
default:
}
ht.put("CELL"+cell.getCellNum(), value); // hashtable에 값을 넣어 둔다.
}else{
ht.put("CELL"+cell.getCellNum(), "NULL");
}
}
}
list.add(ht); // 넣어둔 hashtable의 값을 arrayList에 담는다.
}