最近的项目中用到了报表,所使用的工具就是JasperReport和iReport,JasperReport和iReport的版本一定要对应.
JasperReport, ireport安装与使用请参考
http://enetq.blog.51cto.com/blog/479739/800135 一
http://blog.csdn.net/wandazt/article/details/7411904二
http://enetq.blog.51cto.com/479739/803498三
下面我说一下 java项目里面如何做成导出excel 另存为的效果,上面的例子都是指定路径生成的 这样的如果给客户使用那是肯定不行的
下面图是项目里的效果,导出的excel 是我自己制作的 有点小丑
这就另存为效果。
我用的是struts2框架
首先根据上面链接讲的 把对应的 jasper文件导入项目 导入jar包
下面是action代码
package com.erp.bb.action;
import net.sf.jasperreports.engine.export.JExcelApiExporter;
import com.erp.conn.ConnectionManager;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.OgnlValueStack;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsStatics;
import net.sf.jasperreports.engine.JRAbstractExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JExcelApiExporter;
public class daochuAction extends ActionSupport {
private String name = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String daochuExcel() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
File reportFile = new File(name);
Map parameters = new HashMap();
Connection conn = null;
FileOutputStream output = null;
conn = ConnectionManager.getConnection();
Map parameter = new HashMap();
JasperPrint report = null;
report = JasperFillManager.fillReport(reportFile.getPath(),parameter, conn);
JRAbstractExporter exporter = new JExcelApiExporter();
response.setHeader("Content-disposition ","attachment;filename=a");
response.setContentType("application/vnd.ms-excel");
exporter.setParameter(JRExporterParameter.JASPER_PRINT, report);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
exporter.exportReport();
output.close();
conn.close();
if(name=="/selectKehu.jasper"){
return "selectKehu";
}
else if(name=="/selectUser.jasper"){
return "selectUser";
}else{
return null;
}
}
}
上面有个name参数 是从页面传入的,下面有个 if else 是判断要导出excel 是哪个页面
配置xml
<package name="com.erp.bb.action" extends="struts-default">
<action name="daochu" class="com.erp.bb.action.daochuAction" method="daochuExcel">
<result name="selectKehu" type="dispatcher">/Site/xitonggl/yonghugl/deleteKehuOK.jsp</result>
<result name="selectUser" type="dispatcher">/Site/xitonggl/yonghugl/deleteOK.jsp</result>
</action>
</package>
jsp页面 导出excel <a href="#" target="_blank" rel="external nofollow" onClick="return daochu()" class="btnExcel"><span>导出Excel</span></a>
js 指定 action name参数
function daochu()
{
document.fm.action="daochu.action?name=/selectKehu.jasper";
fm.submit();
}
OK,我请教了好多人弄了好几天才弄好,现在分享给大家,