728x90
반응형



자바를 사용하다보면 사이트에서 이런저런 요청사항들이 많이 들어오게 마련입니다..

 

특히나 엑셀에 대한 요청도 많이 들어오게되죠..

 

프레임웍중에서 이런 기능을 제공하는것들이 있는지에대해선 잘 모르겠지만...(이전 MiPlatform에서는 제공해주던데..)

 

아래 방법은 apache의 POI를 사용하여, java로 구현한 프로그램입니다.

 

API를 보다보면 수많은 인터페이스와 클래스.. 그에대한 메서드들이 있는데..

 

JXL은 사용하기 쉬운반면, 상대적으로 적은API를 제공하고, POI는 어려운반면무궁무진한 기능을 구현할수있는 API를 제공합니다.

 

또 보다보면 그렇게 어렵지도 않아요..

 

라이브러리는 마지막으로 9월에 릴리즈된버전입니다.

 

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
       
//       System.out.println(row.getPhysicalNumberOfCells());
       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

출처 : [직접 서술] 직접 서술

728x90
반응형

+ Recent posts