【分享】用HuTool快速将JFinal的model数据导出Excel里


需求:

JBolt极速开发平台里需要给定数据源(比如List<Model>或List<Record>)就能导出正确的数据

分析:

JFinal的Model和Record 数据都是键值对放Map中,也没有顺序,但是我们在导出Excel的时候,一般是需要导出表里的一部分列,而且需要有一定的顺序,并且列名最好还是中文。

那么,Model和Record里的Map似乎需要转换一下。

技术选型:

hutool的Excel工具类。

Hutool的ExcelUtil、ExcelWriter比较好用,有个Header别名设置。

具体用法链接:

https://www.hutool.cn/docs/#/poi/Excel%E5%B7%A5%E5%85%B7-ExcelUtil

image.png

在JFinal里有些特殊需要处理一下

数据库里的字段名如下:

image.png

Header需要做别名:

excelWriter.addHeaderAlias(“version”, "版本号");
excelWriter.addHeaderAlias(“publish_time”, "发布时间");

这样通过别名设置就可以对应起来Header的中文名和数据库字段名了。

而且设置别名的顺序可以控制Excel中导出列的顺序,是不是很完美。

开始导出:

先定Header:

excelWriter.setOnlyAlias(true);//只导出设置类别名的列,其他字段都不要导出
excelWriter.writeHeadRow(headers);//写出Header

这里的Headers是个list<String>

List<String> headers=new ArrayList<String>();
headers.add("版本号");
headers.add("发布时间");

再定数据行:

excelWriter.write(datas,false);

这里的datas就是一个List<HashMap<String, Object>> 数据库里的每一条数据,都是一个HashMap.

可以把Model和Record的具体attrs或者columns的值给它就可以了。

HashMap<String, Object> data=CPI.getAttrs(model);

每一个字段数据都是kv键值对,key就是上面别名控制的column name value就是具体值了。

只要组装好数据,很容易就导出了。

image.png


这里,我录制了一个JBOlt极速开发平台里封装过的快速导出Excel的专题小教程,如果你已经是JFinal开发者计划成员,可以更方便的学习使用它。                

       


有问题就加我微信

微信:mumengmeng

image.png


评论区

chcode

2020-04-28 18:34

hutool 好评

rirai

2020-05-04 18:02

我也是一直在用hutool,很好用的。

红衣主教

2020-11-09 12:05

小木老师,我用这个方法导出List,导出来的表格是空的只导出表头了,数据没导出来.