参考EasyExcel中的复杂填充. 以下为官方示例代码:

/**

* 复杂的填充

*

* @since 2.1.1

*/

@Test

public void complexFill() {

// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替

// {} 代表普通变量 {.} 代表是list的变量

String templateFileName =

TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "complex.xlsx";

String fileName = TestFileUtil.getPath() + "complexFill" + System.currentTimeMillis() + ".xlsx";

ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();

WriteSheet writeSheet = EasyExcel.writerSheet().build();

// 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。

// forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用

// 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存

// 如果数据量大 list不是最后一行 参照下一个

FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();

excelWriter.fill(data(), fillConfig, writeSheet);

excelWriter.fill(data(), fillConfig, writeSheet);

Map map = new HashMap();

map.put("date", "2019年10月9日13:28:28");

map.put("total", 1000);

excelWriter.fill(map, writeSheet);

excelWriter.finish();

}

模板中需要填充Header和List, header为表头, List为数据行.以下为Excel模板:

以下为填充数据的Class

@Data

public class RadioactivityVO {

/** 时间 */

private String date;

/** α值 */

private String aValue;

/** β值 */

private String bValue;

/** γ值 */

private String yValue;

}

我的代码

Map header = new HashMap<>(4);

List data = new ArrayList<>();

// 这里代码在准备需要填充的数据 list 和 header, 这里不做展示了

// 模板读取

String tempFileName = "环境风险放射性数据导出表_" + System.currentTimeMillis() + ".xlsx";

String exportName = "环境风险放射性数据导出表.xlsx";

try {

ClassPathResource classPathResource = new ClassPathResource("templates/radioactivity_template.xlsx");

ExcelWriter excelWriter = EasyExcel.write(tempFileName)

.withTemplate(classPathResource.getInputStream())

.build();

WriteSheet writeSheet = EasyExcel.writerSheet().build();

excelWriter.fill(data, writeSheet);

excelWriter.fill(header, writeSheet);

excelWriter.finish();

return FileUtil.buildResponse(new File(tempFileName), exportName); // 返回一个ResponseEntity

} catch (Exception e) {

log.error("", e);

throw new RuntimeException("环境风险放射性数据导出异常");

}

遇到的问题,如图所示, 只有表头与时间列有数据, 其他列为空白.

解决步骤:

查看列表数据中其他字段(aValue, bValue, cValue) 是否有值?

debug结果: 有值. (部分字段为null 可以忽略, 这是业务本身的问题)

检查Excel模板中 列字段设置与Java中的属性是否相对应, 检查结果为对应.

另外一个模块也做了一个模板类似的导出功能, 并且导出后Excel数据正确显示. 其定义的模板与Java类如下:

@Data

public class RiskWaterExportVO {

/** 时间 */

private String date;

/** 温度 */

private String temperature;

/** 电导率 */

private String conductivity;

/** 铅 */

private String pb;

/** 镉 */

private String cd;

/** 锌 */

private String zd;

/** 铜 */

private String cu;

}

对比两个模板的不同发现:

能正确显示的模板中 列表数据数据的字段全都为小写, 而未填充数据的模板中列表里面属性有大写, 比如aValue, bValue, yValue.

解决思路

将模板与Java类中大写后面的Value去掉. 如图:

@Data

public class RadioactivityVO {

/** 时间 */

private String date;

/** α值 */

private String a;

/** β值 */

private String b;

/** γ值 */

private String y;

}

再次导出数据显示正确, 结果如图:

结论

官方说明的是

// {} 代表普通变量, {.} 代表是list的变量

盲猜EasyExcel复杂填充, 普通变量属性支持驼峰命名, 列表数据中的字段不支持驼峰命名????????

easyexcel 无模板写入_EasyExcel模板填充踩坑相关推荐

  1. 使用Java读取 “Python写入redis” 的数据踩坑记录

    https://my.oschina.net/u/2338224/blog/3061507 使用Java读取 "Python写入redis" 的数据踩坑记录 https://seg ...

  2. freemarker模板生成word文档踩坑记录

    在使用freemarker的过程中遇到的问题: 1.报错: Caused by: freemarker.core.InvalidReferenceException: The following ha ...

  3. scrapy shell list crawl 命令行无显示退出 no echo quit scrapy 踩坑

    一.问题描述 博主在搞一个scrapy 爬虫项目时,前几天一直正常,但某一天开始,运行 scrapy shell 或者 scrapy list 或者 scrapy crawl 之类命令时,完全没有显示 ...

  4. Laya小游戏上架Vivo平台踩坑记录(持续更新)

    Laya小游戏上架Vivo平台踩坑记录(持续更新) 个人踩坑的一些记录,大佬留情! 一些快捷键: Ctrl+P 搜索脚本文件 Ctrl+Y 恢复操作 Ctrl+Z 撤回操作 Ctrl+F 搜索字段 C ...

  5. EasyExcel写入excel模板

    pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</ ...

  6. 基于阿里巴巴EasyExcel实现对复杂Excel模板的填充

    基于阿里巴巴EasyExcel实现对复杂Excel模板的填充 官方文档以及开源 对应修改 代码展示 测试 官方文档以及开源 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目 ...

  7. java 解析word模板为xml, 动态填充数据到xml,最后输出word文档

    java 解析word模板为xml, 动态填充数据到xml,最后输出word文档 在项目中, 一开始是使用java Apache poi 根据word模板生成word报表, 后面发现框架有个低版本的p ...

  8. poi读取excel多层表头模板写入数据并导出

    poi读取excel多层表头模板写入数据并导出 这两天刚好写excel,写了一份自定义表头的,写了一份模板的,这里展示一份读取excel模板写入数据并导出的 //title excel的名称 head ...

  9. java pdf 报表_关于Java向PDF模板写入数据,以及java制作pdf报表的问题

    1.关于java向PDF模板写入数据 写的特别全一步一步来就行. (1)首先下载一个pdf编辑工具Adobe Acrobat DC (2)准备一个pdf模板文件(你可以把自己创建一个只有表头没有内容的 ...

  10. 【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

    背景需求: [办公类-22-01]周计划系列(1)-生成"信息窗"(提取旧docx内容,写入EXCLE模板,再次生成新docx) 前一篇介绍了生成"信息窗"的过 ...

最新文章

  1. 阿里云首席智联网科学家丁险峰:每个企业都将有LoRa
  2. 【转自聊聊架构公众号】 Redis大key图形化统计及展示
  3. android linux应用安装位置,Android中App安装位置详解
  4. httpd-2.2和httpd-2.4安装部署
  5. MySQL中的char和varchar类型
  6. python控制结构(二)_Python学习手册之控制结构(二)
  7. esp32 rtc 时钟设置不对_咱们RTC时钟案例的时间为什么开始的时候总是2014年,怎么改呢?...
  8. 全程图解:Centos 5.2 下 ORACLE10G 安装配置
  9. php可逆加密函数,简洁的PHP可逆加密函数
  10. 【报告分享】2020中国企业直播应用场景趋势研究报告.pdf(附下载链接)
  11. 命令行远程链接MySQL
  12. AcWing 1952. 金发姑娘和 N 头牛(离散化+差分)
  13. PHP GUID和UUID生成类
  14. Bert实现多标签文本分类
  15. 复数计算器 Java 正则表达式
  16. ipad iphone开发_如何在iPhone或iPad上删除电子邮件
  17. 爬取电影《无双》影评数据,分析,可视化
  18. 生产者消费者模型 android
  19. HDU4801 转魔方、DFS模拟
  20. 谈谈科学与宗教的关系

热门文章

  1. Day15_20180503_链家二手房信息案例分析
  2. MUI框架开发app中出现的问题(持续更新中...)
  3. 如何用html实现文件下载
  4. 酷开系统上线共抗疫情版块
  5. Vue的MVVM框架
  6. 26 图的邻接矩阵:深度优先遍历
  7. 浅谈软件工程学习心得
  8. tp6 阿里云短信接口 php
  9. 安装一台RHEL7虚拟机
  10. Chrome插件开发入门