运用Ireport+jasperReport生成Excel格式报表

转载自 欲纵苍穹
最终编辑 kittop

由于项目要求提供报表打印功能,时间也比较紧迫。于是在网上搜了一把,参考网上运用JSP可以生成Excel格式的报表。jsp实现如下:

<%@ page contentType="application/pdf;charset=GB2312"%>
<%@ page import="net.sf.jasperreports.engine.JasperFillManager" %>
<%@ page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@ page import="net.sf.jasperreports.engine.JRException"%>
<%@ page import="net.sf.jasperreports.engine.JRExporterParameter"%>
<%@ page import="net.sf.jasperreports.engine.export.JRXlsExporterParameter"%>
<%@ page import="net.sf.jasperreports.engine.export.JRXlsExporter"%>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%
//报表编译之后生成的.jasper 文件的存放位置
File reportFile = new File(application.getRealPath("/report/XC.jasper"));
//这个是用来联接我的SQL Server 的JDBC URL
String url ="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=aa";
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//传递报表中用到的参数值
Map parameters = new HashMap();
System.out.println("---------conn-------------");
//连接到数据库
Connection conn = DriverManager.getConnection(url,"sa", "sa");
System.out.println("---------Jasper begin-------------");
//在控制台显示一下报表文件的物理路径
System.out.println(reportFile.getPath());
try{
// fill
   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(),parameters,conn);
  
   // excel输出
   ByteArrayOutputStream oStream = new ByteArrayOutputStream();

    JRXlsExporter exporter = new JRXlsExporter();
   
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
    exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); // 删除记录最下面的空行
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);// 删除多余的ColumnHeader
    exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);// 显示边框
    exporter.exportReport();
   
   byte[] bytes = oStream.toByteArray();
  
   if(bytes != null && bytes.length > 0) {
    response.reset();
System.out.println("---------Jasper end-------------");
response.setContentType("application/vnd.ms-excel");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}else{
    out.print("bytes were null!");
   }
   conn.close();
   }catch(JRException ex){
   out.print("Jasper Output Error:"+ex.getMessage());
}
%>

   在本机启动Tomcat服务器,运行功能可以实现。由于是给市场部做的软件,最终是选择他们那的一台电脑做服务器,我把发布包原原本本地拷到服务器上,结果运行时后台报错:找不到上面红色字体的“IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS”的属性。于是把这一句注释掉,Excel报表显示出来了。接着把上面的 顺序调整了一下,Excel报表也显示出来了。

   exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);// 删除多余的ColumnHeader
    exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);// 显示边框

exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); // 删除记录最下面的空行

   今天我又把上面的顺序调整到当初的顺序,又不报异常了,Excel报表也显示出来了。这些问题真是太莫名其妙了,实在是搞不懂!

你可能感兴趣的:(运用Ireport+jasperReport生成Excel格式报表)