需求:
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
在JFinal里有些特殊需要处理一下:
数据库里的字段名如下:
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就是具体值了。
只要组装好数据,很容易就导出了。
这里,我录制了一个JBOlt极速开发平台里封装过的快速导出Excel的专题小教程,如果你已经是JFinal开发者计划成员,可以更方便的学习使用它。
有问题就加我微信
微信:mumengmeng