报表知识库
我要提问

润乾报表:不展现页面,直接将报表组导出excel

润乾报表的用户提出这样的需求:点击页面上按钮后台自动计算报表组并导出excel。这样的需求可以用api实现。

解决方案

将如下代码加入报表展示的jsp文件中,假设报表组文件是reportFiles/tianbaoraq/4.rpg。

<%

//报表文件相对路径
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();

//循环分别计算子报表
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(“c:/work/name”+dateString+”.xls”);
}catch(Exception e){
e.printStackTrace();
}
%>

<script>
alert(“导出完成。”);
</script>

引自:润乾技术知识库
原文链接:润乾报表:不展现页面,直接将报表组导出excel
相关文章:在润乾参数表单中如何不点击查询按钮自动传参关于润乾报表自定义函数报错的问题决策分析解决方案润乾报表填报处理类问题
其他相关内容:润乾报表 ; RAQSOFT ; 报表工具知识库 ; 商业智能专业知识库