天天看点

jasperReports+iReport实现另存为导出excel超详细

 最近的项目中用到了报表,所使用的工具就是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 是我自己制作的   有点小丑 

jasperReports+iReport实现另存为导出excel超详细
jasperReports+iReport实现另存为导出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,我请教了好多人弄了好几天才弄好,现在分享给大家,

jasperReports+iReport实现另存为导出excel超详细