2009-03-04 63 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.io.螺紋

異常 「主要」 java.lang.IndexOutOfBoundsException FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(FileInputStream.java:199) at org.apache.poi.hssf.record.RecordInputStream.nextRecord(RecordInputStream.java:106) at 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)

非常感謝!我知道,我很懶惰,並且可以自己查看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()); 
    } 
相關問題