历史文章(文章累计470+)
《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
【EasyPoi实战系列】Spring Boot使用EasyPoi动态控制导出的列 - 第471篇
100万数据导出,居然爆炸了OutOfMemoryError?【EasyPoi实战系列】- 第472篇
导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇
数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇
悟纤:师傅,我发现一个挺麻烦的问题。
师傅:怎么说?
悟纤:就是这个很多时候,这个Excel的样式是很复杂的,用代码生成Excel的方式对于处理比较复杂的样式,就有点爱莫能助。
师傅:这个时候,使用模板导出的方式就很有必要了,定义好一个模板,然后使用类似el表达的方式指定单元格的位置,这样样式就可以在模板文件进行编辑了。
悟纤:如果可以这么实现真的是再好不过了,师傅我已经按耐不住了,赶紧带我飞。
师傅:扶好把手,准备启程。
导读
Hi,大家好,我是悟纤。
我就是我,不一样的烟火。我就是我,与众不同的小苹果。
模板是处理复杂Excel的简单方法,复杂的Excel样式,可以用Excel直接编辑,完美的避开了代码编写样式的雷区,同时指令的支持,也提了模板的有效性。
说明:本节的例子的导出实体类是基于前面的章节的实体类进行使用的,所以看的有点蒙圈的小伙伴可以查看前面的文章:
👇🏻👇🏻👇🏻EasyPoi实战系列:
01.《【EasyPoi实战系列】Spring Boot集成EasyPoi - 第467篇》
02.《【EasyPoi实战系列】Spring Boot使用EasyPoi的注解让表格更漂亮以及图片的导出 - 第468篇》
03.《【EasyPoi实战系列】Spring Boot使用EasyPoi实现一对多的导出 - 第469篇》
04.《【EasyPoi实战系列】Spring Boot使用EasyPoi实现多Sheet导出 - 第470篇》
05.《【EasyPoi实战系列】Spring Boot使用EasyPoi动态控制导出的列 - 第471篇》
06.《100万数据导出,居然爆炸了OutOfMemoryError?【EasyPoi实战系列】- 第472篇》
07.《导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇》
08.《数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇》
一、EasyPoi支持的指令
EasyPoi支持的指令以及作用,最主要的就是各种fe的用法:
· 空格分割
· 三目运算 {{test ? obj:obj2}}
· n: 表示 这个cell是数值类型 {{n:}}
· le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
· fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
· fn: 格式化数字 {{fn:(obj;###.00)}}
· fe: 遍历数据,创建row
· !fe: 遍历数据不创建row
· $fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
· #fe: 横向遍历
· v_fe: 横向遍历值
· !if: 删除当前列 {{!if:(test)}}
· 单引号表示常量值 ‘’ 比如’1’ 那么输出的就是 1
· &NULL& 空格
· &INDEX& 表示循环中的序号,自动添加
· ]] 换行符 多行遍历导出
· sum: 统计数据
· cal: 基础的+-X% 计算
· dict: 字典
· i18n: 国际化
二、模板基本导出
看一个常见的到处模板–专项支出用款申请书:
这里面有正常的标签以及$fe遍历,$fe遍历应该是使用最广的遍历,用来解决遍历后下面还有数据的处理方式,我们要生成的是这个需要一些list集合和一些单纯的数据。
fe的写法 fe标志 冒号 list数据 单个元素数据(默认t,可以不写) 第一个元素
{{$fe: maplist t t.id }}
看下数据代码,主要是构造数据TemplateExportParams是主要的参数数据:
/**
* 模板导出
* /demoTemplate/exportExcel
* @param response
*/
@GetMapping("/exportExcel")
public void exportExcel(HttpServletResponse response) throws IOException {
TemplateExportParams params = new TemplateExportParams(
"WEB-INF/doc/专项支出用款申请书_map.xls");
Map<String, Object> map = new HashMap<String, Object>();
map.put("date", "2014-12-25");//申请日期.
map.put("money", 2000000.00);//合计
map.put("upperMoney", "贰佰万");//核定金额合计(大写)
map.put("company", "悟纤科技有限公司");//申请支付单位
map.put("bureau", "财政局");//××局
map.put("person", "悟纤");//联系人
map.put("phone", "1388888****");//联系电话
List<Map<String, String>> listMap = new ArrayList<Map<String, String>>();
for (int i = 0; i < 4; i++) {
Map<String, String> lm = new HashMap<>();
lm.put("id", i + 1 + "");
lm.put("zijin", i * 10000 + "");
lm.put("bianma", "A001");//编码
lm.put("mingcheng", "设计");//名称
lm.put("xiangmumingcheng", "EasyPoi " + i + "期");//项目名称
lm.put("quancheng", "开源项目");//全称
lm.put("sqje", i * 10000 + "");//申请金额
lm.put("hdje", i * 10000 + "");//核定金额
listMap.add(lm);
}
map.put("maplist", listMap);
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
ExcelUtil.downLoadExcel("专项支出用款申请书.xlsx",response,workbook);
}
说明:要准备模板文件《专项支出用款申请书_map.xls》
输出的效果:
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
à悟纤学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
ShardingJDBC分库分表:http://t.cn/A6ZarrqS
分布式事务解决方案:http://t.cn/A6ZaBnIr
JVM内存模型调优实战:http://t.cn/A6wWMVqG
Spring入门到精通:https://t.cn/A6bFcDh4
大话设计模式之爱你:https://dwz.cn/wqO0MAy7