快捷搜索:  as  test

Your stream was neither an OLE2 stream, nor an OOXML stream

近来应用Apache poi 做excel导出的功能,碰到了如下问题:

Your stream was neither an OLE2 stream, nor an OOXML stream

起先比较其他的web工程,没有发明若何办理。着末找到抛出此非常的源码:

org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:75)

public static Workbook create(InputStream inp) throws IOException, InvalidFormatException {

if (!((InputStream)inp).markSupported()) {

inp = new PushbackInputStream((InputStream)inp, 8);

}

if (POIFSFileSystem.hasPOIFSHeader((InputStream)inp)) {

return new HSSFWorkbook((InputStream)inp);

} else if (POIXMLDocument.hasOOXMLHeader((InputStream)inp)) {

return new XSSFWorkbook(OPCPackage.open((InputStream)inp));

} else {

throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");

}

}

可以看到,在调用WorkbookFactory.create(inputStream)来创建Workbook时,会根据文件类型(文件头)来差别、创建相宜的Workbook工具。假如不满意前两个if前提里的hasPOIFSHeader()措施,就会抛出非常。而两个if里的hasPOIFSHeader()措施便是针对Excel2003和Excel2007的判断,读取文件流中的文件头(byte[8])信息去判断。

那既然是根据文件的头部信息去比对进行判断的,并且excel只有2003和2007两个版本,那为什么放在classpath下的excel模板读取后创建WorkBook时,文件header断建都不相符呢?

着末找到缘故原由:maven编译打包时,将resources下的资本文件转码了。终极web工程打出的jar/war包,里面归档进去的excel模板文件都是乱码,文件头信息被改动,导致poi根本无法识别这样的excel文件。

办理法子:

项目的pom.xml中添加maven资本插件

org.apache.maven.plugins

https://blog.csdn.net/qing_mei_xiu/article/details/80661216

您可能还会对下面的文章感兴趣: