The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

<poi.version>4.1.2</poi.version>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>${poi.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>${poi.version}</version>
        </dependency>

将创建poi中的workbook换成如下方式就可以了

用户中存在文件后缀或者文件名称任意变化的情况,变为工厂中 根据流中的属性进行excl的文件的获取,就不会存在异常,03版的excl和后面的excl不会存在不兼容的情况。

 Workbook wb = null;
//使用工厂创建wb的模板 根据流中的内容来判断创建合适的流文件
        wb = WorkbookFactory.create(resourceAsStream);
//        if (fileName.endsWith(".xls")) {
//            wb = new HSSFWorkbook(resourceAsStream);
//        }
//        if (fileName.endsWith(".xlsx")) {
//            wb = new XSSFWorkbook(resourceAsStream);
//        }

之前使用注释中的内容来创建wb 则会存在问题,直接修改文件的后缀,会出现文件中的内容读取不到的情况,则需要根据文件中的流内容来判断excl中的文件,解析相应的文件

工厂中的创建源码如下:

 根据下图中的源码可以看出创建的时候

 

 

 如需查看的话可以自己测试

Logo

鸿蒙生态一站式服务平台。

更多推荐