`
songer4081
  • 浏览: 7952 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Poi3.9 写入时org.apache.poi.hssf.record.RecordInputStream$LeftoverDataException:

阅读更多
POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream(file));   
    
        HSSFWorkbook workBook= new HSSFWorkbook(fs); 
org.apache.poi.hssf.record.RecordInputStream$LeftoverDataException: Initialisation of record 0x894 left 7 bytes remaining still to be read.   
    
    at org.apache.poi.hssf.record.RecordInputStream.hasNextRecord(RecordInputStream.java:156)   
    
    at org.apache.poi.hssf.record.RecordFactoryInputStream.nextRecord(RecordFactoryInputStream.java:231)   
    
    at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:443)   
    
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:285)   
    
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:248)   
    
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:192)   
    
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:174)  


解决方案:重写POIjar包中RecordInputSream.java类的hasNextRecord()方法如下


public boolean hasNextRecord() throws LeftoverDataException {
  if (_currentDataLength != -1 && _currentDataLength != _currentDataOffset) {
	readToEndOfRecord();
  }
  if (_currentDataLength != DATA_LEN_NEEDS_TO_BE_READ) {
	_nextSid = readNextSid();
  }
  return _nextSid != INVALID_SID_VALUE;
}

private void readToEndOfRecord(){
  while(this._currentDataOffset<this._currentDataLength)
      readByte();
}
分享到:
评论
1 楼 houxu56 2013-05-16  
根据解决方案改写后出如下错误

Exception in thread "main" org.apache.poi.hssf.record.RecordFormatException: Unable to construct record instance
at org.apache.poi.hssf.record.RecordFactory$ReflectionConstructorRecordCreator.create(RecordFactory.java:65)
at org.apache.poi.hssf.record.RecordFactory.createSingleRecord(RecordFactory.java:301)
at org.apache.poi.hssf.record.RecordFactoryInputStream.readNextRecord(RecordFactoryInputStream.java:285)
at org.apache.poi.hssf.record.RecordFactoryInputStream.nextRecord(RecordFactoryInputStream.java:251)
at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:443)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:280)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:243)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:187)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:169)
at com.main.source.readExcel.read2003(readExcel.java:47)
at com.main.source.readExcel.read(readExcel.java:38)
at com.main.source.readExcel.main(readExcel.java:32)
Caused by: org.apache.poi.hssf.record.RecordFormatException: Not enough data (0) to read requested (1) bytes
at org.apache.poi.hssf.record.RecordInputStream.checkRecordPosition(RecordInputStream.java:233)
at org.apache.poi.hssf.record.RecordInputStream.readByte(RecordInputStream.java:241)
at org.apache.poi.hssf.record.HeaderFooterBase.<init>(HeaderFooterBase.java:39)
at org.apache.poi.hssf.record.HeaderRecord.<init>(HeaderRecord.java:36)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.poi.hssf.record.RecordFactory$ReflectionConstructorRecordCreator.create(RecordFactory.java:57)
... 11 more

相关推荐

Global site tag (gtag.js) - Google Analytics