EasyExcel模板导出与公式盘算(上)

[复制链接]
发表于 2026-1-26 06:10:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目次
情况要求
功能预览
需求分析
源码跟踪
自界说数据处理处罚器
​总结


迩来做项目时碰到如许一个需求,将数据库表的含有公式的信息导出为Excel文件而且须要盘算其效果,由于上网查询资料后未能完善办理,故将此踩坑过程记录下来以供参考。本文将以若依项目演示,而且将分为两部分,第一部分为使用若依的@Excel注解举行导出并盘算公式,恰当于不要求自界说模板导出,而第二部分将使用EasyExcel实现以自界说模板导出并主动盘算公式方式来实现。
情况要求

若依Cloud 3.6.3
   此处也可使用若依分离版,本文告急涉及内容为@Excel注解。
  功能预览

方便起见,本文以若依用户管理的导出功能为示例,做一个简单的公式盘算的验证,各人可根据本身需求修改相应代码。
起首当地启动若依微服务版本,登录配景,依次选择体系管理 —> 用户管理菜单,进入如下页面

点击该页面的导出按钮

获取如下导出文件

如今假如我们想要在第四行盘算第二和第三行用户编号的和,可以直接在B4单元格输入"=A2+A3"如许的公式来实现,可以注意到此时B4单元格中的公式颜色已经发生厘革,而且主动选中了A2和A3单元格,但实际上我们的需求为从数据库表中导出的单元格实现主动盘算效果,接下来将通过若依前端页面来实现该功能验证。

需求分析

使用用户管理页面新增用户功能,可以添加如下用户信息来模仿公式盘算效果导出(此处填写=A2+A3缘故起因是A1为表头)。

添加完毕后再次点击导出效果如下图,但是B4并没有盘算导出效果,而是酿成了平凡字符串,选中后也没有颜色厘革,可以推测须要从后端代码入手办理题目。

源码跟踪

通过F12下的网络可以找到当前导出接口位于/system/user/export下

后端Controller层如下,可以看出整个导出使用了三行代码,第一活动查询用户信息,第二行创建ExcelUtil实例,第三行调用该实例的exportExcel方法举行导出。

须要注意的是,第一行查询的SysUser对象中对导出列的属性添加了@Excel注解,用于标识导出的表头,而且可以对导出数据格式举行设置。

自界说数据处理处罚器

团结官方文档 配景手册 | RuoYi 提到的自界说数据处理处罚器,我们可以对导出单元格属性举行调解,通过文档可知@Excel注解具有一个Handler属性,该属性答应我们自界说一个数据处理处罚器来处理处罚数据,官方文档中所提示的为修改单元格颜色,同理我们可以通过该方法实现公式的设置。默认的Handler的为 ExcelHandlerAdapter 接口,我们须要实现该接口的format方法。在此之前请查抄你的项目中该接口下的format方法是否如下图所示包罗了4个参数

若不是请升级若依版本,或参考该文件的提交记录修改 ExcelHandlerAdapter 和 ExcelUtil 下的干系代码。 登录 - Gitee.com

新建ExcelFormulaHandler类并实现ExcelHandlerAdapter接口的format方法
  1. public class ExcelFormulaHandler implements ExcelHandlerAdapter{
  2.     @Override
  3.     public Object format(Object value, String[] args, Cell cell, Workbook wb) {
  4.         // 判断是否是公式,例如以 "=" 开头
  5.         if (value != null && value.toString().startsWith("=")) {
  6.             cell.setCellFormula(value.toString());
  7.         }
  8.         return value;
  9.     }
  10. }
复制代码
在SysUser对象的userName属性上的@Excel中添加自界说的Handler类

再次点击导出即可发现公式已经可以主动盘算。

通过跟踪源码可以发现,我们自界说的公式处理处罚类从util实例对象调用 exportExcel 方法后将进入ExcelUtil工具类中,通过对传入的查询对象筛选,终极获取到每个类对象属性上的@Excel参数,并判断是否具有handler属性,终极进入ExcelUtil的dataFormatHandlerAdapter方法中,在这里通过反射获取到我们重写后的类对象进而调用其format方法,从而实现数据格式化。
总结


若导出时不须要使用模板添补,则可直接使用@Excel注解举行导出,对于公式盘算可通过实现ExcelHandlerAdapter接口的format方法,设置单元格属性为formula,并将对应的字段上@Excel注解的Handler属性设置为自界说的类即可,下一篇文章将先容如使用EasyExcel实现自界说模板并主动举行公式盘算。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表