IndexOutOfBoundsException en essayant de lire le file MS Excel à l'aide de Apache POI-HSSF

Tout en essayant d'parsingr le file MS Excel à l'aide de POI-HSSF v3.2, je reçois IndexOutOfBoundsException. La feuille de calcul que j'essaie de lire n'est pas vide, elle a été créée à l'aide de MS Excel 2003 et BiffViewer inclus avec le package POI n'a aucun problème à l'parsingr.

Mon code est le suivant:

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

Et voici la trace de la stack que je reçois:

Exception dans le thread "principal" java.lang.IndexOutOfBoundsException à java.io.FileInputStream.readBytes (méthode native) à java.io.FileInputStream.read (FileInputStream.java:199) à org.apache.poi.hssf.record.RecordInputStream .nextRecord (RecordInputStream.java:106) à org.apache.poi.hssf.eventusermodel.HSSFRecordStream.getNextRecord (HSSFRecordStream.java:128) à org.apache.poi.hssf.eventusermodel.HSSFRecordStream.nextRecord (HSSFRecordStream.java:93 ) à org.apache.poi.hssf.eventusermodel.HSSFEventFactory.genericProcessEvents (HSSFEventFactory.java:141) à org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents (HSSFEventFactory.java:98) à src.Excel.main ( Excel.java:21)

Merci beaucoup! Je sais, je suis paresseux et j'aurais pu regarder la source de POI moi-même, mais j'espère que quelqu'un ici pourra indiquer rapidement ce que j'ai fait dans mon code.

Le mystère résolu, la manière correcte d'get un stream d'input est la suivante

 FileInputStream file = new FileInputStream("c:\\temp\\a.xls"); POIFSFileSystem poifs = new POIFSFileSystem(file); InputStream stream = poifs.createDocumentInputStream("Workbook"); 
 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.getSsortingngCellValue()); }