자바를 사용하다보면 사이트에서 이런저런 요청사항들이 많이 들어오게 마련입니다.
특히나 엑셀에 대한 요청도 많이 들어오게되죠.
아래 방법은 apache의 POI를 사용하여, java로 구현한 프로그램입니다.
API를 보다보면 수많은 인터페이스와 클래스 그에대한 메서드들이 있는데
JXL은 사용하기 쉬운반면, 상대적으로 적은API를 제공하고,
POI는 어려운반면, 무궁무진한 기능을 구현할수있는 API를 제공합니다.
또 보다보면 그렇게 어렵지도 않아요.
POI에 대한 자세한 설명은 poi.apache.org에 가시면 많은 자료들이 있습니다.
이 아래 예제는 만들어진 excel파일이 있고, 그 excel파일 안에 있는 값들을 읽는것입니다.
============================================================================================
import java.io.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hssf.record.*;
import org.apache.poi.hssf.model.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.*;
public class aas{
public aas(){
String excelFile = "d:\\test.xls"; //excel파일의 경로와 파일명
try{
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(excelFile));
//엑셀파일의 경로와 이름을 통해 POIFSFileSystem을 생성
//워크북을 생성!
HSSFWorkbook workbook = new HSSFWorkbook(fs); //파일에 대한 워크북을 생성
int sheetNum = workbook.getNumberOfSheets(); //그파일의 워크시트의 수를 가져온다
for(int k = 0;k < sheetNum; k++){ //시트를 돌면서 모든 데이터를 얻는다.
//시트이름과 시트번호를 추출
System.out.println(k); //시트의 index를 콘솔에 출력
System.out.println(workbook.getSheetName(k)); //시트의 이름을 콘솔에 출력
HSSFSheet sheet = workbook.getSheetAt(k);
//한개의 시트에대한 정보를 HSSFSheet형의 변수에 담는다.
int rows = sheet.getPhysicalNumberOfRows();
//시트별 몇개의 row가 있는지 알아낸다.
for(int r= 0; r<rows;r++){ //시트에 대한 행을 하나씩 추출
HSSFRow row = sheet.getRow(r); //한개의 시트에 몇개의 로우가 있는지 체크
if(row != null){ //로우가 비어있지않다면
int cells = row.getPhysicalNumberOfCells(); //한개의 로우마다 몇개의 cell이 있는지 체크
System.out.print(row.getRowNum()); //row의 index를 콘솔에 출력
System.out.println(cells); //해당 row에 대한 cell의 갯수를 콘솔에 출력
// for(short c = 0; c < cells; c++){ //셀의 마지막까지 잡는다. 이 부분은 오류가있어 사용하지않는다.
for(short c = 0; c < 5; c++){ //5개의 칸까지 잡는다.
//행에대한 셀을 하나씩 추출하여 셀 타입에 따라 처리
HSSFCell cell = row.getCell(c); //cell의 index
if(cell != null){
String value = null;
switch(cell.getCellType()){ //셀의 type에 대해 체크하고 type을 설정해준다.
case HSSFCell.CELL_TYPE_FORMULA:
value = "FORMULA value="+cell.getCellFormula();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value = "NUMERIC value="+cell.getNumericCellValue();
break;
case HSSFCell.CELL_TYPE_STRING:
value = "STRING value="+cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
value = null;
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
value = "BOOLEAN value="+cell.getBooleanCellValue();
break;
case HSSFCell.CELL_TYPE_ERROR:
value = "ERROR value"+cell.getErrorCellValue();
break;
default:
}
System.out.println("CELL col="+cell.getCellNum() + " VALUE="+value); //셀에대한 값을 콘솔에 출력해준다.
}
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args)throws Exception{
aas aas = new aas();
}//main
}//class
excel파일의 구조
결과물
0
Sheet1
04
CELL col=0 VALUE=NUMERIC value=1.0
CELL col=1 VALUE=NUMERIC value=1.0
CELL col=2 VALUE=NUMERIC value=1.0
CELL col=3 VALUE=NUMERIC value=1.0
14
CELL col=0 VALUE=NUMERIC value=2.0
CELL col=1 VALUE=NUMERIC value=2.0
CELL col=2 VALUE=NUMERIC value=2.0
CELL col=3 VALUE=NUMERIC value=2.0
24
CELL col=0 VALUE=NUMERIC value=3.0
CELL col=1 VALUE=NUMERIC value=3.0
CELL col=2 VALUE=NUMERIC value=3.0
CELL col=3 VALUE=NUMERIC value=3.0
34
CELL col=0 VALUE=NUMERIC value=4.0
CELL col=1 VALUE=NUMERIC value=4.0
CELL col=2 VALUE=NUMERIC value=4.0
CELL col=3 VALUE=NUMERIC value=4.0
44
CELL col=0 VALUE=NUMERIC value=5.0
CELL col=1 VALUE=NUMERIC value=5.0
CELL col=2 VALUE=NUMERIC value=5.0
CELL col=3 VALUE=NUMERIC value=5.0
54
CELL col=0 VALUE=STRING value=한글1
CELL col=1 VALUE=STRING value=한글2
CELL col=2 VALUE=STRING value=한글3
CELL col=3 VALUE=STRING value=한글4
66
CELL col=0 VALUE=STRING value=null
CELL col=2 VALUE=STRING value=null
CELL col=3 VALUE=STRING value=d
CELL col=4 VALUE=STRING value=
1
Sheet2
2
Sheet3
'Web Programing! > JAVA / JSP' 카테고리의 다른 글
[JSP] 파일경로, 디렉토리, 파일명 추출하기 (0) | 2011.09.21 |
---|---|
[JSP] 다중업로드/다운로드 (0) | 2011.09.20 |
[JSP] Tomcat5.5에서 Spring 사용시 JSTL이 제대로 표현이 안될 때 (0) | 2011.09.20 |
[JAVA] System.getProperty (0) | 2011.09.18 |
[JSP] response 객체에 HTML, javascript 코드 넣기 (0) | 2011.09.18 |
[JSP] RSS 만들기 - 초보 (0) | 2011.09.17 |
[JSP] javax.mail로 메일 전송시 한글 첨부파일명이 깨지는 경우 (0) | 2011.09.17 |