Erro ao gerar excel via jasper com java

12 respostas Resolvido
javaweb
Adilson_217

Bom dia a todos!
Estou com erro ao tentar gerar um relatório via jasper.

java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCellStyle.setFillPattern(S)V
    	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    	at javax.faces.component.UICommand.broadcast(UICommand.java:330)
    	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:870)
    	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1418)
    	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:670)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:226)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
    	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
    	at org.ocpsoft.rewrite.servlet.impl.HttpRewriteResultHandler.handleResult(HttpRewriteResultHandler.java:42)
    	at org.ocpsoft.rewrite.servlet.RewriteFilter.rewrite(RewriteFilter.java:297)
    	at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:198)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at br.com.ikponto.controle.sessao.Filtro.doFilter(Filtro.java:74)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598)
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Unknown Source)
private byte[] getBytesExcel(JasperPrint print) throws Exception {		
    		byte[] bytes = null;
    		ByteArrayOutputStream byteArrayOutputStream = null;
    		try {
    			byteArrayOutputStream = new ByteArrayOutputStream();
    			JRExporter exporterXLS = new JRXlsExporter();			
    			exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, print);
    			exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, byteArrayOutputStream);
    	        exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
    	        exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE);
    	        exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
    	        exporterXLS.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN, Boolean.TRUE);
    	        exporterXLS.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
    	        exporterXLS.setParameter(JRXlsExporterParameter.MAXIMUM_ROWS_PER_SHEET, 65000);
    	        Map<String,String> formats = new HashMap<String, String>();
    	        // Key - Formato Java, Value - Formato Externo
    	        formats.put("hh:mm:ss","[h]:mm:ss");	      
    	        exporterXLS.setParameter(JRXlsExporterParameter.FORMAT_PATTERNS_MAP, formats);			
    			exporterXLS.exportReport();
    			bytes = byteArrayOutputStream.toByteArray();
    		} catch (Exception e) {
    			logg.error("Erro ao gerar os bytes", e);
    			throw new Exception(e);
    		}
    		finally {
    			if(byteArrayOutputStream != null) {
    				byteArrayOutputStream.close();
    			}
    		}
    		return bytes;
    	}

12 Respostas

Lucas_Camara

Parece um problema de versão de lib, pois não foi encontrado o método setFillPattern na classe HSSFCellStyle.

Adilson_217

Estou usando a versão POI 3.17 e Ireport 5.1.

Lucas_Camara

Vc está usando algum gerenciador de dependência como o maven ou gradle no seu projeto?

Adilson_217

Não.

Lucas_Camara

Vc consegue listar aqui todos os jars que estão sendo usados no projeto? Pode ser que tenha mais de uma versão do apachepoi no classpath e uma versão errada tenha sido utilizada.

Lucas_Camara

Qual a versão do jasperreports que vc está usando? Parece que o jasperreports usa o apache-poi por debaixo do capô. Bem capaz que vc tenha que usar uma versão específica de acordo com a versão do jasperreports que estiver usando.

Com um gerenciador de dependência, isso seria resolvido pra vc, mas como vc está adicionando as dependencias manualmente, tem que ter cuidado com esses detalhes.

Adilson_217

Estou usando a versão do jasper 5.1.0.

Lucas_Camara
Solucao aceita

De acordo com: https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports/5.1.0, essa versão do jasperreports usa o apache-poi 3.7. Tente alterar o jar do apache-poi para essa versão para ver se funciona.

Adilson_217

Esse projeto é legado, faz sentido o que você me disse sobre a versão.
Acabei de vê que as libs do jasper que estão no sistema são da versão 5.0.0, vou baixar essa versão do Ireporte e testar.

Lucas_Camara

Lembrando que o ireport é uma coisa, e a lib jasperreports é outra coisa ok. Vc soh precisa mudar a lib do jasperreports.

Adilson_217

Ok

Adilson_217

Lucas, obrigado!
Fiz o que você falou e funcionou.

Criado 31 de maio de 2021
Ultima resposta 31 de mai. de 2021
Respostas 12
Participantes 2