2009-03-04 8 views
0

POI-HSSF v3.2을 사용하여 MS Excel 파일을 구문 분석하는 동안 IndexOutOfBoundsException이 발생합니다. 내가 읽으려고하는 스프레드 시트는 비어 있지 않으며 MS Excel 2003을 사용하여 작성되었으며 POI 패키지에 포함 된 BiffViewer는 구문 분석에 문제가 없습니다.Apache POI-HSSF를 사용하여 MS Excel 파일을 읽으려고하면 IndexOutOfBoundsException이 발생합니다.

package src; 

import java.io.*; 
import org.apache.poi.hssf.record.*; 
import org.apache.poi.hssf.eventusermodel.*; 

class Excel implements HSSFListener 
{ 
    public static void main (String[] args) throws Exception 
    { 
     FileInputStream stream = new FileInputStream("c:\\temp\\a.xls"); 


     HSSFEventFactory f = new HSSFEventFactory(); 

     HSSFRequest req = new HSSFRequest(); 

     req.addListenerForAllRecords(new Excel()); 

     f.processEvents(req,stream); 

     stream.close(); 
    } 

    public void processRecord (Record r) 
    { 
     System.out.println(r); 
    } 
} 

을 그리고 여기에 내가 무엇입니까 스택 추적입니다 : : 스레드에서

예외 "주"java.lang.IndexOutOfBoundsException 는 java.io에서 다음과 같이

내 코드입니다 FileInputStream.readBytes (네이티브 메소드) at java.io.FileInputStream.read (FileInputStream.java:199) at org.apache.poi.hssf.record.RecordInputStream.nextRecord (RecordInputStream.java:106) at org.apache .poi (HSSFRecordStream.java:128) at .genericProcessEvents (HSSFEventFactory.java:141) org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents (HSSFEventFactory.java:98) src.Excel.main (Excel.java:21)에서

에서

많은 감사합니다! 나는 평범한 게으름이며 POI 소스를 직접 보았을 수도 있겠지만, 여기 누군가는 내가 작성한 코드 내에서 어리석은 일을 신속하게 지적 할 수있을 것이다.

답변

2

미스터리 해결, 입력 스트림을 얻는 올바른 방법

FileInputStream file = new FileInputStream("c:\\temp\\a.xls"); 
POIFSFileSystem poifs = new POIFSFileSystem(file); 
InputStream  stream = poifs.createDocumentInputStream("Workbook"); 
2
FileInputStream stream = 
    new FileInputStream("abcd.xls"); 
    HSSFEventFactory f = new HSSFEventFactory(); 
    HSSFRequest req = new HSSFRequest(); 
    req.addListenerForAllRecords(new Excel()); 
    Workbook wb; 
    wb = new HSSFWorkbook(stream); 
    Sheet sheet=wb.getSheet("abcd11042009"); 
    int rows=sheet.getPhysicalNumberOfRows(); 
    Row headerRow; 
    Cell cell; 
    for(int i=0;i<rows;i++) 
    { 
    headerRow= sheet.getRow(i); 

    cell = headerRow.getCell(1); 
    System.out.println("Doing..."+ cell.getStringCellValue()); 
    } 
다음과 같다