Jasper + Ireports - Mesclando sem necessidade

3 respostas
J

Fala pessoal do do Guj.
Estou com um problema na geração de relatórios em excel usando Jasper e IReports.
O Usuário ao gerar o relatório tem três opções (PDF, RTF e XLS) o que chega nesse método:

/**
	 * @param relatorioPontoJasper - Nome do arquivo jasper compilado ( o mesmo tem que estar na pasta padrão)
	 * @param parametros - Map de Parametros	
	 * @param extensao -	aceita PDF, RTF e XLS 
	 * @param NomeArquivoSaida - Nome do arquivo de saída
	 * @throws EsferaException - lança uma exception
	 */
	public String doPost(String relatorioPontoJasper, Map<String, Object> parametros, String extensao, 
			String NomeArquivoSaida) throws EsferaException {
		
		con = getConnection();
		// Na variavel pathJasper ficara o caminho do diretório para os relatórios compilados (.jasper)
		String pathJasper = getRaiz()+"/jasper/";
		// Local no disco onde o arquivo será gravado
		//System.out.println("JasperUtil.doPost()"+getRaiz());
		String path = getRaiz()+ Constants.RELATORIOS;
		String down =  Constants.RELATORIOS;
		if (!new File(path).exists()) { // Verifica se o diretório existe.   
			(new File(path)).mkdir();   // Cria o diretório   
        }  
		try {			
			// Aqui ele cria o relatório
			JasperPrint jasperprint = JasperFillManager.fillReport(pathJasper+ relatorioPontoJasper, parametros, con);
			
			
			if("pdf".equalsIgnoreCase(extensao) ){  
				JRPdfExporter exporterPDF = new JRPdfExporter();  
	            exporterPDF.setParameter(JRExporterParameter.JASPER_PRINT, jasperprint);  
	            exporterPDF.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, path+ "/"+NomeArquivoSaida+".pdf");  
	            exporterPDF.exportReport();              	            
				//res.sendRedirect(path+ "/"+NomeArquivoSaida+".pdf");
	            //baixarArquivo(path+ "/"+NomeArquivoSaida+".pdf");
	            return (down+ "/"+NomeArquivoSaida+".pdf");		
				
            }else if("rtf".equalsIgnoreCase(extensao) ){  
                JRRtfExporter exporterRTF = new JRRtfExporter();  
                exporterRTF.setParameter(JRExporterParameter.JASPER_PRINT, jasperprint);  
                exporterRTF.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, path+ "/"+NomeArquivoSaida+".rtf");  
                exporterRTF.exportReport(); 
                //baixarArquivo(path+ "/"+NomeArquivoSaida+".rtf");
                return (down+ "/"+NomeArquivoSaida+".rtf");
                
			}else if("xls".equalsIgnoreCase(extensao) ){
	            JRXlsExporter exporterXLS = new JRXlsExporter();  
	            exporterXLS.setParameter(JRExporterParameter.JASPER_PRINT, jasperprint);  
	            
	            // parâmetro que exibe as linhas de grade das células no excel  
	            exporterXLS.setParameter( JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE );
	            
	            // parâmetro que remove linhas em branco geradas pela quebra de página  
	            exporterXLS.setParameter( JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE );
	            
	            // Remove espaço entre as colunas
	            exporterXLS.setParameter( JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE );
	      
	            exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);
	            
	            exporterXLS.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, path+ "/"+NomeArquivoSaida+".xls");  
	            exporterXLS.exportReport();  
	            
	            //baixarArquivo(path+ "/"+NomeArquivoSaida+".xls");	     
	            return (down+ "/"+NomeArquivoSaida+".xls");
	        }else{
	        	return null;
	        }
		}catch (Exception e) {
			e.printStackTrace();
			throw new EsferaException("Erro ao gerar o Relatório");
		}
	}

Tudo certo com PDF e RTF, mas no excel tô tendo um problema que mescla celulas sem necessidade. Como pode ser visto no arquivo em anexo.

Devido a isso o excel gerado acaba até perdendo a utilidade, pois nem classificar por colunas fica possível.

Agradeço a todas as respostas.


3 Respostas

C

Olá,
Eu também já precisei exportar vários relatórios em pdf e xls. Usei o IReports para gerar um em xls, mas ele dava alguns problemas assim como o seu, além de ser, na minha opinião, uma framework chata de se trabalhar e o relatório não fica 100%. Depois usei a framework poi - http://poi.apache.org/ uso até hoje essa frame para gerar relatórios xls. Talvez o seu problema com o IReports possa ser resolvido, dê uma olhada desse link: http://www.guj.com.br/posts/list/57855.java , eles falam algo sobre não deixar espaços entre as áreas (bands).

J

É pessoal. Acho que não vai ter jeito mesmo, li o tópico acima, citado pelo nosso amigo
C?sio Adriano, e também vários outros, mas não encontrei uma solução. Ou melhor, solução tem mas tem que refazer :s
Tentei excluir os espaços vazios, deixei tudo certinho , setei uns parâmetros que não havia setado como

exporterXLS.setParameter( JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE );

Mas não teve jeito não.

Se alguém souber de outra forma, posta aí, por favor.
A princípio as soluções seriam essas abaixo, mas implicam em refazer o relatório.

http://poi.apache.org/

http://jexcelapi.sourceforge.net/


http://www.devmedia.com.br/articles/viewcomp.asp?comp=5547

Se você está com o mesmo problema e não tem uma mensagem abaixo dessa … Sifu

B

Eu sei, faz um tempão que a dúvida foi postada, mas só para futuras pesquisas de quem já teve o problema.

Isso é resolvido alinhando bem os campos no IReport, se for comparado o xls gerado com o template do iReport, vocês vão ver que há diferenças e por isso ele interpreta como espaços…
Espero ter ajudado. Abraços.

Criado 17 de julho de 2009
Ultima resposta 16 de ago. de 2010
Respostas 3
Participantes 3