ruoyi框架自定义导出的Excel文件名
这是ruoyi界面的导出按钮,点击导出后
默认导出的Excel文件名是: Unix时间戳 + Controller传入的sheetName + .xlsx
(对应下图中的文件名:1602402277993 + info + .xlsx)
但是我想要的自定义Excel文件名是: 表名_日期_时间.xlsx
(对应下图中的文件名:注册用户_2020-10-11_15-50-55.xlsx)
下面看点击导出按钮后的调用过程
1、首先,点击导出按钮调用 $.table.exportExcel()函数
2、调用ruoyi-admin组件下src/main/resources/static/ruoyi/js/ry-ui.js的 exportExcel()函数
这个函数的功能是提交POST请求到对应的table.options.exportUrl,exportUrl由导出页 JS 中的option变量进行指定。
请求成功后,window.location.href跳转到对应的下载链接
3、POST请求由对应Controller的export()函数处理
先查出所有数据放入list,再new一个ExcelUtil工具类
最后return 调用ExcelUtil工具类的exportExcel()函数,第一个参数是查出的list,第二个参数是自定义的Excel表名sheetName
修改1:将sheetName参数修改为你想导出的表名,比如改为"注册用户"
4、查看ruoyi-common组件下src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java工具类的exportExcel()函数
先用传入的两个参数执行init()函数初始化,然后执行没有参数的exportExcel()函数(重载函数之间的调用)
5、跳转到无参exportExcel()函数
中间省略,只看修改文件名的地方
参数sheetName传入encodingFilename()函数
6、跳转到encodingFilename()函数
下面被注释的那行filename就是原本的编码文件名:UUID_传入的sheetName + .xlsx
修改2:增加红框那三行,用DateTimeFormatter自定义日期时间格式,将文件名编码为:传入的sheetName_日期_时间.xlsx
7、文件名编码完成,window.location.href跳转到对应链接 ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
8、由ruoyi-admin组件下 src/main/java/com/ruoyi/web/controller/common/CommonController.java 来处理下载请求
修改3:因为编码后的文件名已经变成我想要的,所以直接赋值给realfilename
下面被注释掉的那行是原本获取真实文件名的方式,因为原本的编码文件名是:UUID_传入的sheetName + .xlsx,用substring取子串去掉UUID得到:传入的sheetName + .xlsx,再用System.currentTimeMillis()函数获取Unix时间戳与之拼接为:Unix时间戳 + 传入的sheetName + .xlsx,也就是文章开头的默认下载文件名
9、下载Excel,已变成自定义文件名: 表名_日期_时间.xlsx