easyexcel 无模板写入_EasyExcel模板填充踩坑
参考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模板填充踩坑相关推荐
- 使用Java读取 “Python写入redis” 的数据踩坑记录
https://my.oschina.net/u/2338224/blog/3061507 使用Java读取 "Python写入redis" 的数据踩坑记录 https://seg ...
- freemarker模板生成word文档踩坑记录
在使用freemarker的过程中遇到的问题: 1.报错: Caused by: freemarker.core.InvalidReferenceException: The following ha ...
- scrapy shell list crawl 命令行无显示退出 no echo quit scrapy 踩坑
一.问题描述 博主在搞一个scrapy 爬虫项目时,前几天一直正常,但某一天开始,运行 scrapy shell 或者 scrapy list 或者 scrapy crawl 之类命令时,完全没有显示 ...
- Laya小游戏上架Vivo平台踩坑记录(持续更新)
Laya小游戏上架Vivo平台踩坑记录(持续更新) 个人踩坑的一些记录,大佬留情! 一些快捷键: Ctrl+P 搜索脚本文件 Ctrl+Y 恢复操作 Ctrl+Z 撤回操作 Ctrl+F 搜索字段 C ...
- EasyExcel写入excel模板
pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</ ...
- 基于阿里巴巴EasyExcel实现对复杂Excel模板的填充
基于阿里巴巴EasyExcel实现对复杂Excel模板的填充 官方文档以及开源 对应修改 代码展示 测试 官方文档以及开源 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目 ...
- java 解析word模板为xml, 动态填充数据到xml,最后输出word文档
java 解析word模板为xml, 动态填充数据到xml,最后输出word文档 在项目中, 一开始是使用java Apache poi 根据word模板生成word报表, 后面发现框架有个低版本的p ...
- poi读取excel多层表头模板写入数据并导出
poi读取excel多层表头模板写入数据并导出 这两天刚好写excel,写了一份自定义表头的,写了一份模板的,这里展示一份读取excel模板写入数据并导出的 //title excel的名称 head ...
- java pdf 报表_关于Java向PDF模板写入数据,以及java制作pdf报表的问题
1.关于java向PDF模板写入数据 写的特别全一步一步来就行. (1)首先下载一个pdf编辑工具Adobe Acrobat DC (2)准备一个pdf模板文件(你可以把自己创建一个只有表头没有内容的 ...
- 【办公类-22-02】周计划系列(2)-生成“主题知识”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)
背景需求: [办公类-22-01]周计划系列(1)-生成"信息窗"(提取旧docx内容,写入EXCLE模板,再次生成新docx) 前一篇介绍了生成"信息窗"的过 ...
最新文章
- 阿里云首席智联网科学家丁险峰:每个企业都将有LoRa
- 【转自聊聊架构公众号】 Redis大key图形化统计及展示
- android linux应用安装位置,Android中App安装位置详解
- httpd-2.2和httpd-2.4安装部署
- MySQL中的char和varchar类型
- python控制结构(二)_Python学习手册之控制结构(二)
- esp32 rtc 时钟设置不对_咱们RTC时钟案例的时间为什么开始的时候总是2014年,怎么改呢?...
- 全程图解:Centos 5.2 下 ORACLE10G 安装配置
- php可逆加密函数,简洁的PHP可逆加密函数
- 【报告分享】2020中国企业直播应用场景趋势研究报告.pdf(附下载链接)
- 命令行远程链接MySQL
- AcWing 1952. 金发姑娘和 N 头牛(离散化+差分)
- PHP GUID和UUID生成类
- Bert实现多标签文本分类
- 复数计算器 Java 正则表达式
- ipad iphone开发_如何在iPhone或iPad上删除电子邮件
- 爬取电影《无双》影评数据,分析,可视化
- 生产者消费者模型 android
- HDU4801 转魔方、DFS模拟
- 谈谈科学与宗教的关系