导出报表数据时重定义文件名

在一个项目中要求导出的当前报表时重定义导出的文件名,我们都知道默认情况下,比如一个报表文件名是 STUDENT.rpx 导出为 excel 文件 (例如是 xlsx) 那么最终的文件就是 STUDENT.xlsx。现在要求对导出的文件名重新定义,例如这样的格式:M_yyyy_mm_dd.xlsx,文件名中的 yyyy_mm_dd 是用户选择参数模板中的日期。例如用户选择的日期是 2024-01-01,那么最终的文件名是 M_2024_01_01.xlsx。

我参考了这个帖子中介绍的方式修改了 showReport.jsp,并且在不设置参数模板的情况下 (因此不会存在 STUDENT_arg.rpx) 我从报表的 (1,1) 的位置取值作为导出后的文件名,确实可以达到重定义文件名的目的。本文的案例文件在文章末尾

但通常情况下报表是需要提供用户接口方便查询数据的,因此当我设置了参数模板之后,发现情况发生了变化,我已经把测试案例打包放在文章末尾,这个测试案例使用的是润乾自带的案例数据库

这个测试报表用来展示润乾案例数据库中的学生表基本信息,用户可以选择班级和日期,其实只是想把用户选择的日期作为报表文件名的一部分,在查询数据时日期并不是 SQL 中的条件,班级则是真正的条件。

STUDENT.rpx 设计界面:
imagepng

A1 的值 =“M”+p_date,这个单元格的值将作为导出文件的文件名

参数设置:
imagepng

数据集设置:
imagepng

数据集参数:
imagepng

imagepng

参数模板 STUDENT_arg.rpx
设计界面:
imagepng

D2 是一个下拉框,变量名:p_classname

imagepng

G2 是一个日期框,变量名:p_date

imagepng

完成之后把 STUDENT.rpx 和 STUDENT_arg.rpx 放在润乾报表 web\webapps\demo\WEB-INF\reportFiles\rpx 目录下,

因为我修改的是 showReport.jsp, 所以在浏览器中地址栏使用这个文件打开报表,完整的 URL:
http://localhost:6868/demo/reportJsp/showReport.jsp?rpx=rpx/STUDENT.rpx

预览结果如下:
imagepng
此时查看润乾的控制台可以看到 showReport.jsp 里面输出的调试信息:

imagepng

然后直接导出文件,选择 excel
imagepng
可以看到下载的文件名是 M.xlsx, 因为没有选择日期,所以 A1 中的只有固定值 M, 这个结果没有问题。

但是当我选择了日期,并且点击了【查询】按钮之后,可以看蓝色区域变成了 M2024-01-30
imagepng
如果选择导出文件,那么文件名应该是 M2024-01-30.xlsx, 但是实际上是 STUDENT.xlsx

imagepng
此时查看润乾控制台,发现没有调试信息输出。

showReport.jsp 的变化情况:
增加了引用
<%@ page import=“com.raqsoft.report.model.*”%>
<%@ page import=“com.raqsoft.report.util.,com.raqsoft.report.usermodel.”%>
<%@ page import=“com.raqsoft.report.view.*,com.raqsoft.report.usermodel.Engine”%>
<%@ page import=“com.raqsoft.report.view.excel.ExcelReport”%>

imagepng

String reportPath = request.getRealPath("/WEB-INF/reportFiles/"+report);
ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);
Context cxt = new Context(); //构建报表引擎计算环境        
Engine engine = new Engine(rd, cxt); // 构造报表引擎
IReport iReport = engine.calc(); // 运算报表
String tab=iReport.getCell(1,1).getValue().toString();

System.out.println("tab========================="+tab);

imagepng

在 66 行增加了
cxt.setParamValue(paramName,paramValue);

在 119 行增加了
saveAsName=“<%=tab%>”

imagepng

在本文最后我把本次用的案例文件重新整理一下,在这里可以下载到 showReport.jsp 和报表源文件
showReportzip
demozip