如何自定义报表导出文件的名称
需求描述
报表本身名称命名可能是英文或者用户不易理解的单词,用户导出文件的时候,可能需要对这个名字重新命名下,让用户看导出文件的名称就知道文件里的数据意义。
实现原理
使用 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>
这个能解决吗?为啥我的不行
请具体说一下您是什么问题
我要设置导出的文件名为单元格 A1 的内容
这个帖子的第三个例子 或者另外这个帖子 http://c.raqsoft.com.cn/article/1550627473658
都是实际的示例 您跟着做就可以做出来
如果做不出来 可以把具体报错以及写法贴上来 我们给您看
你的行了么
如果 A1 单元格是动态变化的呢,比如加了年月日,点击查询后会动态变更 A1 单元格,那么这个变更后的 A1 单元格,如何设置成导出的文件名称呢
showReport.jsp 展现的话,查询走的是 queryReport.jsp,需要在这个 jsp 里也加上相应的处理代码