使用easyexcel读取Excel文件时报错(避坑)
在项目开发中要求对Excel进行解析,获取里面的数据,本想着用easyexcel读取那还不是so easy嘛,几行代码搞定,结果发现项目启动的时候报错了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'abstractIndexAO' : Invocation of init method failed; nested exception is com.alibaba.excel.exception.ExcelAnalysisException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1. 13 ] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java: 137 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java: 409 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java: 1626 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java: 555 ) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java: 483 ) at org.springframework.beans.factory.support.AbstractBeanFactory$ 1 .getObject(AbstractBeanFactory.java: 312 ) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java: 230 ) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java: 308 ) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java: 197 ) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java: 761 ) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java: 867 ) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 543 ) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java: 122 ) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java: 693 ) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java: 360 ) at org.springframework.boot.SpringApplication.run(SpringApplication.java: 303 ) at com.banksteel.boot.Main.run(Main.java: 63 ) at com.banksteel.bone.BootApp.main(BootApp.java: 23 ) Caused by: com.alibaba.excel.exception.ExcelAnalysisException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1. 13 ] at com.alibaba.excel.analysis.ExcelAnalyserImpl.<init>(ExcelAnalyserImpl.java: 51 ) at com.alibaba.excel.ExcelReader.<init>(ExcelReader.java: 143 ) at com.alibaba.excel.read.builder.ExcelReaderBuilder.build(ExcelReaderBuilder.java: 270 ) at com.alibaba.excel.read.builder.ExcelReaderBuilder.sheet(ExcelReaderBuilder.java: 293 ) at com.alibaba.excel.read.builder.ExcelReaderBuilder.sheet(ExcelReaderBuilder.java: 281 ) at com.mysteel.oilchem.appsupport.ao.impl.IndexAOImpl.init(IndexAOImpl.java: 84 ) 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: 498 ) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java: 366 ) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java: 311 ) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java: 134 ) ... 17 common frames omitted Caused by: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1. 13 ] at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java: 292 ) at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java: 756 ) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java: 298 ) at com.alibaba.excel.analysis.v07.XlsxSaxAnalyser.readOpcPackage(XlsxSaxAnalyser.java: 141 ) at com.alibaba.excel.analysis.v07.XlsxSaxAnalyser.<init>(XlsxSaxAnalyser.java: 58 ) at com.alibaba.excel.analysis.ExcelAnalyserImpl.choiceExcelExecutor(ExcelAnalyserImpl.java: 92 ) at com.alibaba.excel.analysis.ExcelAnalyserImpl.<init>(ExcelAnalyserImpl.java: 45 ) ... 29 common frames omitted |
本着面向百度编程的思想,网上一顿搜索,发现都是说我在解析 .xls、.xlsx文件时用错了对象。
1 2 3 | 2007 版excel和 2003 版excel文件格式不同导致: HSSFWorkbook & HSSFSheet :支持 xls 格式; XSSFWorkbook & XSSFSheet :支持 xlsx 格式。 |
还以为是和别人使用的Excel版本不同,导致文件损坏,还特意去另存一份 .xlsx的文件,结果还是不行
忍一时越想越气,退一步越想越亏。我用的easyExcel啊,它会根据Excel的类型自动创建底层的解析对象,这不对啊
debug一下,发现它读取的是编译后target->classes目录下的Excel文件,双击发现文件损坏打不开,老铁,这不对劲啊
凭什么我在resources目录下能正常打开,编译了之后就不行了啊。
突然意识到,会不会是在打包编译的过程中把Excel文件损坏了,导致文件读取失败,报错
本着面向百度编程的思想,网上一顿搜索,哎,别说,还真是啊
1 | 项目在编译或者打包过程中,会对excel进行编译,这样经过文件filter过滤一遍之后,excel文件就损坏了 |
知道原因后就很好解决啦,在pom文件中排除Excel的过滤就行了啊
1 2 3 4 5 6 7 8 9 10 11 | <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>UTF- 8 </encoding> <nonFilteredFileExtensions> <nonFilteredFileExtension>xlsx</nonFilteredFileExtension> <nonFilteredFileExtension>xls</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin> |
然后在用maven plugin clean一下,再去运行,果然问题解决,再看target目录下的Excel文件,完好无损。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)