当前位置: 首页 > news >正文

换友网站进口全屋定制十大名牌

换友网站,进口全屋定制十大名牌,jsp做网站都可以做什么,网站建设叁金手指花总2背景 在使用easyexcel导出时,如果遇到一个模板中同时存在 一部分是实体类中的字段,另外部分是列表的字段,需要特殊处理一下,比如下面的模板: 这里面 user, addr 是实体类(或者map&#xff09…

背景

在使用easyexcel导出时,如果遇到一个模板中同时存在 一部分是实体类中的字段,另外部分是列表的字段,需要特殊处理一下,比如下面的模板:
在这里插入图片描述

这里面 useraddr 是实体类(或者map),extra是一个字符串,datadata1是两组列表数据。

准备数据的代码如下:

    private static Map<String, Object> getParams() {// 准备导出的数据User user = new User();user.setName("user");Map<String, Object> addr = new HashMap<>();addr.put("name", "addr");String extra = "extra";List<Data> dataList = new ArrayList<>();for (int i = 0; i < 10; i++) {Data data = new Data();data.setName("data" + i);data.setAge(i);dataList.add(data);}Map<String, Object> params = HashMap.newHashMap(16);params.put("user", user);params.put("addr", addr);params.put("extra", extra);params.put("data", dataList);params.put("data1", dataList);return params;}

问题

我们一开始的想法很简单,直接把这些参数打包丢到map里面,直接fill一次不就成功了,但是,实际上并没有成功,导出代码如下:

var params = getParams();
String templateFileName = "D:\\test.xlsx";String fileName = "D:\\test-res.xlsx";
try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) {WriteSheet writeSheet = EasyExcel.writerSheet().build();excelWriter.fill(params, writeSheet);
}

导出结果:
在这里插入图片描述

可以看到,除了没有前缀的的extra,所有带前缀的都导出失败了,仔细查阅文档后,发现这些需要用FillWrapper包装一下,为了方便使用,这里写了一个工具类,代码如下:

public static void export(String templateFileName, String outputFile, Map<String, Object> params){try (ExcelWriter excelWriter = EasyExcel.write(outputFile).withTemplate(templateFileName).build()) {WriteSheet writeSheet = EasyExcel.writerSheet().build();// 先把不带前缀的都fill进去excelWriter.fill(params, writeSheet);params.forEach((key, val) -> {// 基础类型都是不带前缀的,前面处理了,不再处理。if (ClassUtil.isBasicType(ClassUtil.getClass(val))) {return;}if (val instanceof Collection<?> collectionVal) {// 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。// forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用// 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();excelWriter.fill(new FillWrapper(key, collectionVal), fillConfig, writeSheet);}else {// bean/map 只能假装是个列表了excelWriter.fill(new FillWrapper(key, Collections.singleton(val)), writeSheet);}});}}

代码中的ClassUtilhutool

导出结果:
在这里插入图片描述
可以看到,几处都填充成功了。

补充

web环境下把导出方法的前俩参数直接改成对应的输出/输入流就行了。

http://www.yayakq.cn/news/276075/

相关文章:

  • 郑州市做网站的h5如何做网站
  • 微商城网站建设教程巫溪集团网站建设
  • 做公益网站的目的网站建设调研问卷
  • 给赌场做网站湖北百度关键词排名软件
  • 南宁平台公司广西seo网站
  • 定制网站建设公司电话天津百度首页优化排名
  • 有哪些可以在线做app的网站企业网站怎么自适应
  • 邵阳 做网站公司网站建设一对一培训班
  • 网站开发发展趋势wordpress 目录配置文件
  • 阿里 网站建设方案书 模板番禺建设网站平台
  • 服务器添加网站公司网站做优化少钱
  • 隆基泰和 做网站wordpress国内医疗
  • 网站设计公司 杭州wordpress需要什么安装环境
  • 网站设计和策划的步骤是什么施工企业负责人带班检查计划
  • 住建部工程建设标准网站企业网站建设常见问题
  • 安徽亳州建设厅网站腾度网站建设
  • 长沙正规制作网站公司手机网站建设口碑好
  • 企业网站搭建价格自己做视频网站流量钱
  • 做的网站有营销效果吗最新wordpress主题
  • 设计做笔记的网站世界十大市场调研公司
  • 专业的医疗行业网站模板重庆森林经典台词图片
  • 网站建设外包公司怎么样网站流量少的原因
  • 上海知名网站建WordPress集成插件到主题
  • 美丽乡村网站建设策划书企业vi设计公司价格
  • 自己做网站流程wordpress插件吧
  • 跨站攻击 wordpress东营网站建设东营市南一路东营软件园英
  • 网站ueo广西医科大学网站建设
  • c2c网站代表有哪些网页设计大赛作品欣赏
  • 腾讯云主机能给几个网站备案北京做微信网站
  • iis7配置网站404页面化妆培训网站 源码