如何自定义报表导出文件的名称

 

需求描述

报表本身名称命名可能是英文或者用户不易理解的单词,用户导出文件的时候,可能需要对这个名字重新命名下,让用户看导出文件的名称就知道文件里的数据意义。

实现原理

使用 saveAsName 标签属性

具体操作

1、明确固定名称的情况

直接在展现报表的 jsp 中添加属性,配置如下:
saveAsName=“xxx”
其中,xxx 为固定内容,那么导出的就是以 xxx 为名称的文件
具体操作可以参考 如何自定义报表导出的文件名

2、导出文件名称是一个明确规则

例如需要在原有报表名称的基础上添加导出当前时间作为文件名称,那么此时需要我们在前面的 jsp 代码中处理好变量,然后把变量值赋值给 saveAsName 属性。
核心操作如下:
1)获取报表名称和当前日期组合成需要的变量值:

String report1 = report.substring(0,report.lastIndexOf(".rpx"));  
        Date date = new Date();     
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
    String createdate = sdf.format(date);  
        String name=report1+"_"+createdate;  

2)变量值赋值给标签属性

saveAsName="<%=name%>"

具体操作可以参考 润乾报表导出 excel 给当前报表名称加上当前日期

3、导出文件名称是该报表中某个单元格的值

这种情况的处理其实和 2 的处理类似,只是获取变量值的方法不同。需要用 API 代码读取到报表,从对应格子中取到内容,将内容赋给变量,然后用这个变量给定 saveAsName 的值。

核心操作如下:
1)读取报表获取单元格值

String reportPath = request.getRealPath("/WEB-INF/reportFiles/test.rpx"); 	
ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath); 	
String savename=(String) rd.getCell((short)1,(short)1).getValue();//获取A1单元格值

2)变量值赋值给标签属性

saveAsName="<%=savename%>"

jsp 完整示例代码如下:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/raqsoftReport.tld" prefix="report" %>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.net.*" %>
<%@ page import="com.raqsoft.report.usermodel.*"%>
<%@ page import="com.raqsoft.report.model.*"%>
<%@ page import="com.raqsoft.report.util.*"%>
 
<html>
<link type="text/css"href="css/style.css" rel="stylesheet"/>
<body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>
<%
    request.setCharacterEncoding("GBK");

    String reportPath = request.getRealPath("/WEB-INF/reportFiles/test.rpx"); 
	
    ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath); 
	
    String savename=(String) rd.getCell((short)1,(short)1).getValue();//获取A1单元格值
	
   String rptName = "RPT_"+Double.toString(Math.random());
    request.setAttribute(rptName,rd);
     
%>  
<jsp:include page="toolbar.jsp" flush="false" />
<table id="rpt"align="center" width=100% height=100%>
    <tr><td align=center valign=top height=100%>
       <report:html name="report1" 
           srcType="defineBean"
            beanName="<%=rptName%>"
			saveAsName="<%=savename%>"
           exceptionPage="/reportJsp/jsp/myError.jsp"
  /> 
    </td></tr>
</table>
  
</body>