Jasper Reports com problemas ao exportar XLS

Opa! :smiley:
Senhores, fiz uma aplicação que gera relatórios com o IReport e Jasper Reports. Com HTML e PDF ele gera tudo certinho, mas quando vou gerar com XLS (excel) ele gera o arquivo, mas não consigo abrir :evil:

Esse é o código que exporta pra pdf:

String fileName = new SimpleDateFormat("ddMMyyyy-HHmmss").format(new Date()) + ".pdf"; exporter = new JRPdfExporter(); response.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\""); response.setContentType("application/octet-stream"); exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, print); exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, new BufferedOutputStream(response.getOutputStream()));

Apenas modifiquei ele para gerar xls:

String fileName = new SimpleDateFormat("ddMMyyyy-HHmmss").format(new Date()) + ".xls"; exporter = new JRXlsExporter(); response.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\""); response.setContentType("application/vnd.ms-excel"); exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, print); exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, new BufferedOutputStream(response.getOutputStream())); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);

O browser perguntra se quero salvar ou abrir o arquivo, independente de qual eu fizer, ao abrir o arquivo o excel manda a seguinte mensagem: “O aqruivo não pode ser acessado. O arquivo pode ser para somente leitura ou você está tentando acessar um local somente para leitura. Ou, o servidor no qual o documento está armazenado pode não estar respondendo.”

Alguem sabe oq pode ser?

Se eu mando exportar direto para o disco(“c:\reports\relatorio.xls”) ele funciona. Só não funciona quando eu tento gerar ele direto pro cara salvar do browser :x

*Juro, depois de apanhar tanto vou fazer um tutorial ninja de exportações em Jasper Reports!!! :mrgreen:

qdo o browser pergunta abrir ou salvar opção salvar mas grava zerado …

porque ???

já o arquivo gerado no diretorio está diferente de zero …

alguém já passou por isso …

se puder me ajudar …pois quero o browser de opção de salvar ou abrir o arquivo …help…help…help


System.out.println("Getting the binary..."+jasperURL);   
  			//request.setAttribute("REPORT_URL", jasperURL);
  		//response.setContentType("application/octet-stream");
  			
  			JasperReport relatoriosJasper =	(JasperReport)JRLoader.loadObject(jasperURL);
  			
  			JasperPrint jasperPrint = JasperFillManager.fillReport(relatoriosJasper, parameters, con);
  			response.setContentType("application/excel");
			response.setHeader("Content-Disposition","attachment; filename="+relatoriosJasper.getName()+".xls");  
  			ByteArrayOutputStream output = new ByteArrayOutputStream();  
  		    OutputStream outputfile= new FileOutputStream(new File("c://output//"+relatoriosJasper.getName()+".xls"));  
  		  //File outputfile = new File("c:/output/"+relatoriosJasper.getName()+".xls");

  			
  		    // coding For Excel:  
  		    JRXlsExporter exporterXLS = new JRXlsExporter();  
  		    exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);  
  		    exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, output);  
  		    exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);  
  		   exporterXLS.setParameter(JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.TRUE);  
  		   exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);  
  		   exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);  
  		   exporterXLS.exportReport();  
  		   outputfile.write(output.toByteArray());   
           output.flush();
  		   output.close();  
		   con.close();

Cara, to com o mesmo problema.

Não consigo exportar o xls para um stream de jeito nenhum. O arquivo sempre fica zerado.

No pdf, eu usei o JasperExportManager.exportReportToPdfStream(). Funcionou beleza.

Mas para xls não existe este método. Fiz como você, mas tá dando erro também.

o que fiz e rodou…
partindo de um jasper para pdf e converteu para xls

abs

JasperReport relatoriosJasper = (JasperReport)JRLoader.loadObject(jasperURL);

                       JasperPrint jasperPrint =
JasperFillManager.fillReport(relatoriosJasper, parameters, con);
                        response.setContentType("application/x-download");
                        response.setHeader("Content-Disposition", "attachment;
filename=" + relatoriosJasper.getName()+".xls");

                       JRXlsExporter xls=new JRXlsExporter();

           OutputStream output = response.getOutputStream(  );

           xls.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
           xls.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,output);
           xls.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE,
Boolean.TRUE);
           xls.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
//            xls.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
Boolean.TRUE);
           xls.setParameter(JRXlsExporterParameter.MAXIMUM_ROWS_PER_SHEET,Integer.decode("65000"));
           xls.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE,
Boolean.TRUE);
           xls.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
Boolean.FALSE);
           xls.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
Boolean.TRUE);
           System.out.println("Before Exporting to XLS");

           xls.exportReport();

          output.flush();
            output.close();

Consegui também.

O meu problema é que estava usando o Dispatcher depois e não funcionava. Retirei o forward do servlet para o JSP funcionou.

Valeu.