快逸报表组导出excel的方法介绍
在实际的应用中,经常会有数据从excel导入系统数据库或者数据从系统中导入到excel,这两种业务操作快逸报表可以轻易地实现,但普通的导出数据大多都是一个报表导出到一个单独的excel中,或者多个报表导入一个excel中的多个sheet中,还有就是把报表组中所有报表导入道一个excel多个sheet中。快逸报表提供了报表组导出excel的方法group_saveAsExcel(),但是不能满足客户的各种需求,如果客户需要不显示报表,直接导出excel,就要用快逸提供的接口如何实现这一业务。
一:实现思路
先读取报表组,分别计算报表组中的报表,然后把多个结果添加到导出列表,最后实现导出到excel的多个sheet中。
二:实现步骤
1.首先制作一个报表组(含有两个报表)
4.1.raq
4.2.raq
2:利用快逸提供的方法读入报表组,读入计算并导出,代码如下:
<%@ page contentType=”text/html;charset=gb2312″ %>
<%@ page import=”com.runqian.report4.usermodel.ReportGroup”%>
<%@ page import=”com.runqian.report4.view.excel.ExcelReport”%>
<%@ page import=”com.runqian.report4.ide.GroupEngine”%>
<%@ page import=”java.util.Enumeration”%>
<%@ page import=”java.util.HashMap”%>
<%@ page import=”java.util.Iterator”%>
<%@ page import=”java.util.Date”%>
<%@ page import=”java.text.SimpleDateFormat”%>
<%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %>
<%@ page import=”com.runqian.report4.usermodel.Context”%>
<%@ page import=”com.runqian.report4.usermodel.IReport”%>
<%@ page import=”com.runqian.report4.usermodel.ParamMetaData”%>
<%
//报表文件相对路径
String reportFile=application.getRealPath(“/reportFiles/tianbaoraq/4.rpg”);
//新建一个 HashMap对象存放参数,map可以存放空参数。传递参数时名称要保证和报表组用到的参数名一致。
HashMap map=new HashMap();
Enumeration paramNames = request.getParameterNames();
if(paramNames!=null){
while(paramNames.hasMoreElements()){
String paramName = (String) paramNames.nextElement();
String paramValue=request.getParameter(paramName);
//把参数名和参数值分别加入到hashmap的key和value里
map.put(paramName,paramValue);
}
}
//读取报表组
ReportGroup rg = ReportGroup.read(reportFile);
//报表组参数元数据
ParamMetaData rg_pmd=rg.getParamMetaData();
//设置报表组参数
if(rg_pmd !=null){
int rg_pmdNum = rg_pmd.getParamCount();
String rg_paramName=”";
for(int j=0; j<rg_pmdNum;j++){
rg_paramName=rg_pmd.getParam(j).getParamName();
for (Iterator it=map.keySet().iterator();it.hasNext();){
//遍历hashmap,将对应的参数写入报表组对象
String key= (String)it.next();
if(rg_paramName.equals(key)) {
rg_pmd.getParam(j).setValue((String)map.get(key));
}
}
}
}
//获取上下文
Context context = new Context();
//计算报表组
GroupEngine gEngine = new GroupEngine(rg, context);
//获取子报表数量
int num=rg.getItemCount();
//新建excelReport对象
ExcelReport er=new ExcelReport();//excel
//循环分别计算子报表
for(int i=0;i<num;i++){
IReport r = gEngine.get(i);
//生成子表的excel对象
er.export( “a”+i,r);
}
try{
//将多个子表的excel对象导入到一同个excel文件里。文件名拼上当前时间
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat(“yyyyMMddhhmmss”);
String dateString = formatter.format(currentTime);
er.saveTo(“d:/”+dateString+”.xls”);
}catch(Exception e){
e.printStackTrace();
}
%>
<script>
alert(“导出完成。“);
</script>
三:运行此jsp,执行其中的代码
当页面中出现导出成功时,就说明报表组导出成功。并分别存储在a0 sheet和a1 sheet中