ruoyi框架默认的导出Excel功能代码简析

ruoyi框架默认导出Excel功能

项目使用的是RuoYi Bootstrap多模块版本4.7.2,启动项目后会有默认的导出功能。包括使用ruoyi自带代码生成器,都会有导出功能的附带。接下就讲解一下默认的Excel导出功能的数据流程和一些问题。

ruoyi框架默认的导出Excel功能代码简析_第1张图片

ruoyi自带导出功能按钮,点击后会有弹出框“确定导出所有岗位吗?”,若是初次使用点击确定后可能会出现导出无法成功的问题,

ruoyi框架默认的导出Excel功能代码简析_第2张图片

接下就分析一下点击导出按钮后的调用过程。

调用过程

1、点击导出按钮后会在对应的html页面,上调用$.table.exportExcel()函数

如岗位页面对应的是ruoyi-admin组件下src/main/resources/templates/system/post/post.html

ruoyi框架默认的导出Excel功能代码简析_第3张图片

2、该函数会接着调用src/main/resources/static/ruoyi/js/ry-ui.js的 exportExcel()函数

ruoyi框架默认的导出Excel功能代码简析_第4张图片

在该函数中使用拼接的方法post调用com.ruoyi.web.controller.common.commonController的通用下载请求fileDownload(),其中传了两个参数。一个是当前传入的文件名称,一个是是否删除参数。

请求成功后,window.location.href动态输出跳转到对应的下载链接。

3、对应的Controller的export()函数处理

ruoyi框架默认的导出Excel功能代码简析_第5张图片

在函数中先先查询该表的所有数据,再new一个ExcelUtil工具类,retuen工具类下的exportExcel()函数,传参第一个参数为表数据,第二个参数为表名,在这里可以修改为自己定义的名字,之后的下载的文件名会在表名的基础上做拼接。

4、对应的ExcelUtil工具类下的exportExcel()函数处理

文件在src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java

ruoyi框架默认的导出Excel功能代码简析_第6张图片

通过重载之间调用,将参数传入,先执行init()函数初始化,在调用无参函数exportExcel(),这方法是对所有导出功能综合处理的方法。

5、无参exportExcel()函数

ruoyi框架默认的导出Excel功能代码简析_第7张图片

先是创建空的字节输出流,使用weritSheet()函数创建并写入Sheet().

ruoyi框架默认的导出Excel功能代码简析_第8张图片

 在这个方法里,首先判断生成多少个sheet,就是计算list的长度与sheetSize的比,默认是65536.之后再生成sheet,使用的Workbook.java中的方法。之后再生成一行来写入实体类上带注解的列头名称,形成列头。并以此创建单元格来写入数据,从而形成完整的excel表格。

接下来调用encodingFilename()拼接下载文件的名称,默认是拼接UUID+工作表名,UUID在输出时是长串字符,不太美观和方便,可以改成日期+时间+工作表名,例如"岗位数据_02-14_15-55-20.xlsx"

ruoyi框架默认的导出Excel功能代码简析_第9张图片

之后就是把文件以及文件名绑定,作为完整的excel存在内存中等待下载。return的返回值就是完整的文件名,供之后的拼接下载。

6、out = new FileOutputStream(getAbsoluteFile(filename));

该语句最后要实现形成最后的字节输出流,首先是getAbsoluteFile()函数获取下载路径。同样是通过拼接的方法来形成字符串类型的下载路径。在方法中先是拼接配置文件中的地址,再判断并创建完整的父级目录来保证接下来的下载。

ruoyi框架默认的导出Excel功能代码简析_第10张图片

配置文件位置src\main\resources\application.yml

再用完整的地址new一个新的文件输出流,赋值到之前的out。个人理解为,输出用的流文件已经与指定的下载地址绑定,通过该地址就可以下载该流,目前是空,接下是赋值操作。wb.write(out);将工作簿写入输出流,即所谓的赋值操作。完成后,调用IOUtils.closeQuietly();安静关闭。

成功后返回success消息,若失败返回失败信息,控制台打印错误信息,前端收到后显示失败提示。该函数执行结束。

7、真正的下载

ruoyi框架默认的导出Excel功能代码简析_第11张图片

由exportExcel()函数的window.location.href动态输出跳转到下载链接,调用该方法。

按照RuoYi写的逻辑,重新拼接了一个带当时时间的realFileName,并且将这个名字输出,所以浏览器下载的文件名不再是我们之前定义的“岗位数据_02-14_15-55-20.xlsx”,而是较长的“164490470055302-15_13-57.xlsx”,并且下载下来的地址也不是我们之前定义的地址,而是通过浏览器选择的地址。等于说之前的地址设置和文件名称修改都不起作用。

注意,我们设置的路径下是会生成文件的,但是默认传入参数为true,又删除了它,这波操作没看明白。最后的结果是的空创建了一个文件夹。RouYi的这个功能代码有待优化。

以上就是ruoyi框架默认导出Excel功能的简析。

你可能感兴趣的:(若依,RuoYi若依,spring,boot,前端,idea)