尝试使用Apache POI-HSSF读取MS Excel文件时发生IndexOutOfBoundsException
在尝试使用POI-HSSF v3.2parsingMS Excel文件时,我得到了IndexOutOfBoundsException。 我试图读取的电子表格不是空的,它已经使用MS Excel 2003创build,并且与POI包一起提供的BiffViewer没有parsing它的问题。
我的代码如下:
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); } }
这里是我得到的堆栈跟踪:
线程“main”中的exceptionjava.io.FileInputStream.readBytes(Native Method)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)at org.apache.poi.hssf.eventusermodel.HSSFRecordStream.nextRecord(HSSFRecordStream.java:93 )at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.genericProcessEvents(HSSFEventFactory.java:141)at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents(HSSFEventFactory.java:98)at src.Excel.main( Excel.java:21)
非常感谢! 我知道,我是懒惰的,可以自己看看POI的来源,但是希望这里的某个人能够迅速地指出我在代码中所做的任何愚蠢的事情。
神秘解决了,获取inputstream的正确方法如下
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.getStringCellValue()); }
- 如何使用java填写Excel文件
- 如何从Excel文件单元格使用POI获取数值和string值,我正在获取数值错误,string值很容易获取
- 如何从Excel工作表中获取具体的列数据以将其存储在使用POI的对象的数组列表中?
- 使用Apache POI从Excel中读取单元格中的内容
- 在Excel中打开时使用Apache POI更新xls文件
- 在Java中匹配Excel的浮点数
- 即使在使用apache poi的代码相同的情况下,excel单元也会在不同的机器上收缩
- 无法使用Apache POI ss用户模型添加工作表
- 使用Apache POI的Java Selenium – 读取一个Excel文件将这两个行拉在一起