【问题标题】:java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/ExtendedColorjava.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/ExtendedColor
【发布时间】:2015-11-03 20:10:49
【问题描述】:

我正在尝试从 Spring Framework 中的 Web 应用程序中导出 excel 文件。 首先,我以 XLS 格式进行操作,这很有效。 现在,我正在尝试以 XLSX 格式做同样的事情。为此,我将一些类如 HSSFWorkbook 更改为 XSSFWorkbook,或将 HSSFSheet 更改为 XSSFSheet。

问题出在这个源码的第三行:

    XSSFCellStyle estiloFecha = workbook.createCellStyle();
    estiloFecha.cloneStyleFrom(estiloNormal);
    estiloFecha.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("dd/MM/yyyy hh:mm"));

错误是:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/ExtendedColor
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:859)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:754)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:399)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:354)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:185)
net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:159)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:108)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:217)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:193)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)

一些帮助?

【问题讨论】:

标签: java excel spring apache-poi


【解决方案1】:

推广对答案的评论 - 您的 POI jar 不匹配。 Apache POI 有几个不同的 jar,包括 different project components。如POI FAQ, these must all be from the same version 中所述!不支持在版本之间混合 jars,并且会失败并出现类似这样的错误

快速修复 - 删除所有 Apache POI jar,只添加最新版本中的那些。

如果您无法弄清楚您实际使用的是哪些 jar,请use the code given in this FAQ entry 通过类加载器报告使用了哪些 jar。然后,删除旧的,这样您最终只会从一个版本中获得一组一致的 POI jar

之后,考虑使用 Apache Maven 或 Apache Ant 或 Groovy 的 Gradle 等工具来为您处理构建过程和依赖项。这些负责为您提供一致的集合,避免您在类路径上随机放置不兼容的 jar 时发现的问题!

【讨论】:

    猜你喜欢
    • 2019-05-27
    • 2019-06-14
    • 2016-03-29
    • 1970-01-01
    • 2011-09-21
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多