首页 >> 大全

EasyExcel的使用--填充excel

2023-06-23 大全 48 作者:考证青年

是一个基于Java的简单、省内存的读写Excel的开源项目。

今天根据官网()指导,试了一个简单的填充例子,如下。

了解常见API的话,访问地址:常见api · 语雀 ()。

填充效果下图所示:

1.创建填充实体。

/*** 填充excel实体*/
@Data
public class FillData {private String name;private double number;
}

2.测试填充main方法。

public static void main(String[] args) {String templateFileName ="template.xlsx";String fileName = "fill.xlsx";/********简单填充,可以根据对象填充,也可以根据Map填充***********/// 方案1 根据对象填充// 这里会填充到第一个sheet, 然后文件流会自动关闭FillData fillData = 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 data() {List list = new ArrayList();for (int i = 0; i < 10; i++) {ExportData data = new ExportData();data.setString("字符串" + i);data.setDate(new Date());data.setDoubleData(0.56);list.add(data);}return list;}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了