如何使用apache poi打开带有宏的xls文件?

时间:2015-12-07 14:47:06

标签: java apache-poi

问题是我无法使用xls文件从inputstream打开工作簿。 当我尝试通过WorkbookFactory.create(inputStream)打开它时,我得到:

Exception in thread "main" 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:216)
    at org.apache.poi.hssf.record.RecordInputStream.readByte(RecordInputStream.java:224)
    at org.apache.poi.hssf.record.RecordInputStream.readUByte(RecordInputStream.java:260)
    at org.apache.poi.hssf.record.DConRefRecord.<init>(DConRefRecord.java:174)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.apache.poi.hssf.record.RecordFactory$ReflectionConstructorRecordCreator.create(RecordFactory.java:87)
    at org.apache.poi.hssf.record.RecordFactory.createSingleRecord(RecordFactory.java:338)
    at org.apache.poi.hssf.record.RecordFactoryInputStream.readNextRecord(RecordFactoryInputStream.java:310)
    at org.apache.poi.hssf.record.RecordFactoryInputStream.nextRecord(RecordFactoryInputStream.java:276)
    at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:480)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:326)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:115)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:172)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:143)
    at ru.efo.search.support.excel.WorkBookReader.init(WorkBookReader.java:67)
    at ru.efo.search.support.excel.WorkBookReader.<init>(WorkBookReader.java:42)
    at ru.efo.search.support.excel.WorkBookReader.main(WorkBookReader.java:126)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

但是如果相同的文件是.xlsm格式,它可以正常工作,因为WorkbookFactory使用XSSFWorkbook而不是HSSFWorkbook。不幸的是,我的应用程序中只有InputStream,我无法更改文件格式。请帮助!

0 个答案:

没有答案