Lista,
Alguém tem um exemplo ou tutorial de como gerar uma planilha excel no iReport?
Quando eu gero em pdf funciona legal, porém em excel fica tudo zoado.
Alguma dica?
Muito obrigado,
Marques
Lista,
Alguém tem um exemplo ou tutorial de como gerar uma planilha excel no iReport?
Quando eu gero em pdf funciona legal, porém em excel fica tudo zoado.
Alguma dica?
Muito obrigado,
Marques
Olá Marques,
Já gerei algumas planilhas em excel utilizando o IReport e funcionou sem problemas, uma coisa que eu percebi é que vc deve evitar deixar espaços entre as áreas (bands), para que ele não crie células em branco no excel gerado.
[]'s
andrik,
Por favor,
Vc pode me enviar o teu jrxml e a classe para eu dar uma estudada em como fazer a coisa funcionar?
Obrigado,
Marques
marques@fitsoftware.com.br
Olá Marques,
Eu não tenho mais os fontes do projeto, se você quiser puder anexar o código fonte que você está utilizando eu dou uma olhada e testo para verificar
[]'s
Na realidade eu só criei o relatorio no ireport com texto estático e peço pra visualizar em pdf e excel. em pdf funciona legal, porém em exel o mesmo noa acontece…
Hoje a noite eu faço um exemplo e posto aqui no guj
[]'s
Andrik,
Nem sei como te agradecer!!!
Antecipadamente agradecido,
Marques
Ae Marques, eu estou gerando relatorios em XLS com servlet (outputstream) e funcionou, mas fica muito diferente de quando gerado em PDF, as cores mudam, as fontes mudam de tamanho e de tipo.
alguem sabe como eu faço pra acertar as fontes tanto para PDF quanto para XLS?
Marques, ai vai o código que eu estou usando:
jasperDesign = JRXmlLoader.load(reportDesignFile);
//Compila o relatório
jasperReport = JasperCompileManager.compileReport(jasperDesign);
//Preenche o relatório com os parametros e o data source
jasperPrint = JasperFillManager. fillReport(jasperReport, param, ds);
//-------------------------------------------------
//XLS OUTPUT STREAM
//-------------------------------------------------
JExcelApiExporter exporter = new JExcelApiExporter();
ByteArrayOutputStream xlsReport = new ByteArrayOutputStream();
exporter.setParameter(JExcelApiExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JExcelApiExporterParameter.OUTPUT_STREAM, xlsReport);
exporter.setParameter(JExcelApiExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporter.setParameter(JExcelApiExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
exporter.setParameter(JExcelApiExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporter.exportReport();
byte[] bytes = xlsReport.toByteArray();
response.setContentType("application/vnd.ms-excel");
response.setContentLength(bytes.length);
xlsReport.close();
OutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
foi assim que eu fiz.
Cheek666 , meu caro!
Fiz como vc me passou porém dá o erro abaixo. será que falta algum jar na minha aplicação?
Onde eu encontro esse jar do jxl?
Muito obrigado,
Marques
Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: jxl/write/biff/RowsExceededException
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:298)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.lang.NoClassDefFoundError: jxl/write/biff/RowsExceededException
br.com.fit.action.EstimativaColheitaAction.toExcel(EstimativaColheitaAction.java:1646)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.20 logs.
--------------------------------------------------------------------------------
Olá Marques, estou anexando o jrxml do relatório e o excel gerado. Repare que quando vc vai trabalhar com o IReport e Excel vc deve tomar cuidado com o que eu citei no post anterior.
Você não deve deixar espaços entre as bands, sendo que dentro da própria band se possível não deixar espaços entre os elementos, senão o excel vai criar várias células vazias
[]'s
Andrik,
Muito obrigado,
Agora, diga-me uma coisa: compilei o exemplo gerando um .jasper.
Como eu faço, para de dentro do meu método chamar esse arquivo?
Pergunto, pq segui os passos do colega acima e recebo o erro que vc pode observar acima.
De qqer forma, mais uma vez muito obrigado!!!
Marques
Galera tenho uma dúvida qual o tipo do documento que coloco: application/vnd.ms-excel ou tex/excel ?
Para completar… eu fiz este exemplo com JSF e funcionou corretamente. Gerando o relatório com sucesso. Mas todo o código fonte foi tirado dos modelos anteriores, e ajudou em tudo. Obrigado…
public void geraRelatorio() throws JRException, Exception
{
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
Connection con = getConnection( );
Statement stm = con.createStatement( );
String query = "SELECT * FROM PedidoOperadora ";
ResultSet rs = stm.executeQuery( query );
/* implementação da interface JRDataSource para DataSource ResultSet */
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
/* HashMap de parametros utilizados no relatório. Sempre instanciados */
Map parameters = new HashMap();
JasperDesign desenho = JRXmlLoader.load( "C:/eclipse/workspace/telefonia/WebContent/relatorios/PedidoOperadora.jrxml" );
//compila o relatório
JasperReport relatorio = JasperCompileManager.compileReport( desenho );
JasperPrint impressao = JasperFillManager.fillReport( relatorio , parameters, jrRS );
JRXlsExporter exporter = new JRXlsExporter();
ByteArrayOutputStream xlsReport = new ByteArrayOutputStream();
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, impressao);
exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, xlsReport);
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME, "c:/relatorio.xls");
exporter.exportReport();
byte[] bytes = xlsReport.toByteArray();
response.setContentType("application/vnd.ms-excel");
response.setContentLength(bytes.length);
xlsReport.close();
OutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
/* Realza contornan
iexão com o banco de dados, redo o objeto Connection */
private static Connection getConnection( ) throws
ClassNotFoundException, SQLException
{
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://localhost:1433;databaseName=SGSCAMGBD";
String user = "user_adm";
String password = "admcamg";
Class.forName(driver);
Connection con = DriverManager.getConnection(url, user, password);
return con;
}