2015-11-03 2 views
1

Я пытаюсь экспортировать файл excel из веб-приложения в Spring Framework. Во-первых, я сделал это в формате XLS, который сработал. Теперь я пытаюсь сделать то же самое в формате XLSX. Для этого я сменил некоторые классы, такие как HSSFWorkbook, на XSSFWorkbook или HSSFSheet на XSSFSheet.java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/ExtendedColor

Проблема заключается в третьей строке этого источника:

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) 

помощь?

+1

Похоже, вы ошиблись в баночках. Вы [попытались выполнить инструкции по записи в Apache POI часто на этой точной теме] (http://poi.apache.org/faq.html#faq-N10006)? – Gagravarr

+0

Спасибо @Gagravarr, я следовал инструкциям, и теперь это работает! – waridc

ответ

0

Продвижение комментария к ответу - у вас неправильно подобранные банки POI. Apache POI имеет несколько разных банок, покрывающих different project components. Как объяснено в POI FAQ, these must all be from the same version! Смешивание банок между версиями не поддерживается, и ошибки с ошибками не совпадают.

Быстрое исправление - удалите все ваши аппликации Apache POI и добавьте только те из последней версии.

Если вы не можете понять, какие банки вы используете, use the code given in this FAQ entry сообщить через загрузчик классов, которые использовались в баночках. Затем удалите старые, поэтому вы получите только согласованный набор баннеров POI с одного выпуска.

После этого рассмотрите возможность использования чего-то типа Apache Maven или Apache Ant или Groovey's Gradle для обработки вашего процесса сборки и зависимостей для вас. , Те, кто заботится о том, чтобы получить вам последовательный набор, избегая проблем, которые вы обнаружили, выбирая случайные несовместимые банки на вашем пути к классу!

Смежные вопросы