EasyExcel的使用--填充excel

是一个基于Java的简单、省内存的读写Excel的开源项目 。
今天根据官网()指导,试了一个简单的填充例子,如下 。
了解常见API的话,访问地址:常见api · 语雀 () 。

EasyExcel的使用--填充excel

文章插图
填充效果如下图所示:
1.创建填充实体 。
EasyExcel的使用--填充excel

文章插图
/*** 填充excel实体*/@Datapublic class FillData {private String name;private double number;}
2.测试填充main方法 。
【EasyExcel的使用--填充excel】public static void main(String[] args) {String templateFileName ="template.xlsx";String fileName = "fill.xlsx";/********简单填充,可以根据对象填充,也可以根据Map填充***********/// 方案1 根据对象填充// 这里会填充到第一个sheet,然后文件流会自动关闭FillData fillData = http://www.kingceram.com/post/new FillData();fillData.setName("张三");fillData.setNumber(5.2);EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(fillData);// 方案2 根据Map填充Map map = new HashMap();map.put("name", "张三");map.put("number", 5.2);EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map);/********填充列表***********/// 方案1 一下子全部放到内存里面 并填充EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(data());// 方案2 分多次填充,会使用文件缓存(省内存)ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();excelWriter.fill(data(), writeSheet);excelWriter.fill(data(), writeSheet);// 千万别忘记关闭流excelWriter.finish();/********复杂填充***********/// 这里注意 入参用了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.put("date", "2019年10月9日13:28:28");map.put("total", 1000);excelWriter.fill(map, writeSheet);excelWriter.finish();/********数据量大的复杂填充***********/// 直接写入数据excelWriter.fill(data(), writeSheet);excelWriter.fill(data(), writeSheet);// 写入list之前的数据map.put("date", "2019年10月9日13:28:28");excelWriter.fill(map, writeSheet);// list 后面还有个统计 想办法手动写入// 这里可以直接用list,也可以用对象List totalListList = new ArrayList();List totalList = new ArrayList();totalListList.add(totalList);totalList.add(null);totalList.add(null);totalList.add(null);// 第四列totalList.add("统计:1000");// 这里是write 别和fill 搞错了excelWriter.write(totalListList, writeSheet);excelWriter.finish();// 总体上写法比较复杂 但是也没有想到好的版本 异步的去写入excel 不支持行的删除和移动,也不支持备注这种的写入,所以也排除了可以// 新建一个 然后一点点复制过来的方案,最后导致list需要新增行的时候,后面的列的数据没法后移,后续会继续想想解决方案/********横向填充***********/excelWriter.fill(data(), fillConfig, writeSheet);excelWriter.fill(data(), fillConfig, writeSheet);map.put("date", "2019年10月9日13:28:28");excelWriter.fill(map, writeSheet);// 别忘记关闭流excelWriter.finish();/********多列表组合填充***********/// 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet);excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet);excelWriter.fill(new FillWrapper("data2", data()), writeSheet);excelWriter.fill(new FillWrapper("data2", data()), writeSheet);excelWriter.fill(new FillWrapper("data3", data()), writeSheet);excelWriter.fill(new FillWrapper("data3", data()), writeSheet);map.put("date", "2019年10月9日13:28:28");excelWriter.fill(map, writeSheet);// 别忘记关闭流excelWriter.finish();}/*** 组装要导入的数据* @return*/private static List