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

个人备案网站建设方案书市场营销推广策划

个人备案网站建设方案书,市场营销推广策划,wordpress整站密码,山西网站制作背景 在使用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.khdw.cn/news/46549.html

相关文章:

  • 游戏平台管理系统顺德搜索seo网络推广
  • 肇庆住房和城乡建设局网站企业推广策划方案
  • 福建省建设工程监理协会网站今天的新闻
  • 网站建设规划设计公司排名现在推广平台哪家最好
  • 江苏省网站建设哪家好网络营销师主要做什么
  • 利用小米路由器mini做网站做网页的网站
  • 北京网络推广公司排行武汉seo主管
  • dede做的网站打不开成都seo公司
  • 企业网站内容策划上海有什么seo公司
  • 郴州房产网seo知识培训
  • 南宁北京网站建设外贸网站推广平台有哪些
  • 个性化网站建设公司seo引擎搜索网站
  • wordpress好还是hexo好安卓优化大师下载安装到手机
  • 做网站 对方传销网络营销包括哪些
  • 供应邯郸做网站市场营销方案
  • 微商做图王官方网站重庆seo网络营销
  • wordpress主题加入html压缩网络优化工程师是做什么的
  • 龙岗英文网站建设最新seo课程
  • 手机版网站快照如何做优化设计三要素
  • 哪些网站会盗取优化大师绿色版
  • 驾校网站建设方案小程序定制开发
  • wordpress子分类模板关键词优化 搜索引擎
  • 南昌建设人才网站青岛官网优化
  • 网站推广的方式包括哪些种子搜索在线 引擎
  • 网站建设中的形象满意指的是销售搜索引擎优化主要包括
  • 建站网站设计上海百度研发中心
  • 做网站是怎么赚钱的网络口碑营销案例分析
  • 刚察县公司网站建设新闻头条最新
  • 定西市小企业网站建设网络服务公司经营范围
  • 中国软件园排名前十百度怎么做关键词优化