2009-03-04 24 views
0

Beim Versuch, MS Excel-Datei mit POI-HSSF v3.2 zu analysieren, erhalte ich IndexOutOfBoundsException. Die Tabelle, die ich zu lesen versuche, ist nicht leer, sie wurde mit MS Excel 2003 erstellt, und BiffViewer, das im POI-Paket enthalten ist, hat kein Problem beim Parsen.IndexOutOfBoundsException beim Versuch, MS Excel-Datei mit Apache POI-HSSF zu lesen

Mein Code ist wie folgt:

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); 
    } 
} 

Und hier ist der Stack-Trace Ich erhalte:

Exception in thread "main" java.lang.IndexOutOfBoundsException bei java.io. FileInputStream.readBytes (native Methode) bei java.io.FileInputStream.read (FileInputStream.java:199) bei org.apache.poi.hssf.record.RecordInputStream.nextRecord (RecordInputStream.java:106) bei org.apache .poi .hssf.eventusermodel.HSSFRecordStream.getNextRecord (HSSFRecordStream.java:128) bei org.apache.poi.hssf.eventusermodel.HSSFRecordStream.nextRecord (HSSFRecordStream.java:93) bei org.apache.poi.hssf.eventusermodel.HSSFEventFactory .genericProcessEvents (HSSFEventFactory.java:141) bei org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents (HSSFEventFactory.java:98) bei src.Excel.main (Excel.java:21)

Vielen Dank! Ich weiß, ich bin einfach faul und hätte mir die POI-Quelle selbst ansehen können, aber hoffentlich wird jemand hier in der Lage sein, schnell auf jede dumme Sache hinzuweisen, die ich in meinem Code getan habe.

Antwort

2

Rätsel gelöst, der richtige Weg, um einen Eingangsstrom des Erhaltens wird wie folgt

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()); 
    }