ruoyi框架自定义导出的Excel文件名

发布时间 2023-04-21 20:26:37作者: binbinx

 

 https://www.cnblogs.com/an-drew/p/ruoyi-custom-excel.html#!comments

这是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

 

#1楼 2023-01-17 21:19 CoderV的进阶笔记


SheetName的名称 完全可以通过注解的形式来实现
我实现在这个仓库,可供参考
https://github.com/valarchie/AgileBoot-Back-End