2011. 11. 22. 15:14


POI 에서 Excel업로드를 할 때 아래와 같은 형식으로 코딩한다.
(.xls일 때의 경우로 .xlsx는 방법이 약간 다르다)

sheet = workBook.getSheetAt(0);         
// 생성된 시트를 이용하여 그 행의 수만큼 돌면서 행을 생성
rows = sheet.getPhysicalNumberOfRows();

for(int r = 1; r < rows; r++){
        try {
                row = sheet.getRow(r);
             if(row == null){
                   break;
             }

        }
}
...

식으로 하는데 getPhysicalNumberOfRows() 이부분은
사용자가 엑셀을 입력한 Row의 수를 캐치하여 리턴해주는 부분이다.
허나 이부분이 간혹 사용자가 입력한 Row가 아닌데도 읽어들여
입력한 Row이상의 수를 리턴하는 경우가 종종 발생한다.

이 때 row = sheet.getRow(r); 이 부분에서 row를 가져와도
row는 null 로 나오므로 여기서 캐치하여 잘못 인식하지 않도록 처리해야된다.


관련 Article : http://tech.gaeatimes.com/index.php/archive/how-to-read-write-excel-spreadsheet-from-java/

  • getPhysicalNumberOfRows() returns the physical number of rows which may be more than the actual (logical) number of rows. The same goes for getPhysicalNumberOfCells().
  • You should check for nulls when fetching the HSSFRow and HSSFCell objects as shown.
  •  

    Posted by silver0r