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

