原文地址

Demo地址

最简单的填充

模版

效果

对象

@Getter
@Setter
@EqualsAndHashCode
public class FillData {private String name;private double number;private Date date;
}

代码

    /*** 最简单的填充** @since 2.1.1*/@Testpublic void simpleFill() {// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替String templateFileName =TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "simple.xlsx";// 方案1 根据对象填充String fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx";// 这里 会填充到第一个sheet, 然后文件流会自动关闭FillData fillData = new FillData();fillData.setName("张三");fillData.setNumber(5.2);EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(fillData);// 方案2 根据Map填充fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx";// 这里 会填充到第一个sheet, 然后文件流会自动关闭Map<String, Object> map = new HashMap<String, Object>();map.put("name", "张三");map.put("number", 5.2);EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map);}

填充列表

模版

效果

代码

    /*** 填充列表** @since 2.1.1*/@Testpublic void listFill() {// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替// 填充list 的时候还要注意 模板中{.} 多了个点 表示listString templateFileName =TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "list.xlsx";// 方案1 一下子全部放到内存里面 并填充String fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx";// 这里 会填充到第一个sheet, 然后文件流会自动关闭EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(data());// 方案2 分多次 填充 会使用文件缓存(省内存) jdk8// since: 3.0.0-beta1fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx";EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(() -> {// 分页查询数据return data();});// 方案3 分多次 填充 会使用文件缓存(省内存)fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx";ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();excelWriter.fill(data(), writeSheet);excelWriter.fill(data(), writeSheet);// 千万别忘记关闭流excelWriter.finish();}

复杂的填充

模版

最终效果

代码

    /*** 复杂的填充** @since 2.1.1*/@Testpublic 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<String, Object> map = new HashMap<String, Object>();map.put("date", "2019年10月9日13:28:28");map.put("total", 1000);excelWriter.fill(map, writeSheet);excelWriter.finish();}

数据量大的复杂填充

模版

效果

代码

    /*** 数据量大的复杂填充* <p>* 这里的解决方案是 确保模板list为最后一行,然后再拼接table.还有03版没救,只能刚正面加内存。** @since 2.1.1*/@Testpublic void complexFillWithTable() {// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替// {} 代表普通变量 {.} 代表是list的变量// 这里模板 删除了list以后的数据,也就是统计的这一行String templateFileName =TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "complexFillWithTable.xlsx";String fileName = TestFileUtil.getPath() + "complexFillWithTable" + System.currentTimeMillis() + ".xlsx";ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();// 直接写入数据excelWriter.fill(data(), writeSheet);excelWriter.fill(data(), writeSheet);// 写入list之前的数据Map<String, Object> map = new HashMap<String, Object>();map.put("date", "2019年10月9日13:28:28");excelWriter.fill(map, writeSheet);// list 后面还有个统计 想办法手动写入// 这里偷懒直接用list 也可以用对象List<List<String>> totalListList = new ArrayList<List<String>>();List<String> totalList = new ArrayList<String>();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需要新增行的时候,后面的列的数据没法后移,后续会继续想想解决方案}

横向的填充

模版

最终效果

代码

    /*** 横向的填充** @since 2.1.1*/@Testpublic void horizontalFill() {// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替// {} 代表普通变量 {.} 代表是list的变量String templateFileName =TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "horizontal.xlsx";String fileName = TestFileUtil.getPath() + "horizontalFill" + System.currentTimeMillis() + ".xlsx";ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();excelWriter.fill(data(), fillConfig, writeSheet);excelWriter.fill(data(), fillConfig, writeSheet);Map<String, Object> map = new HashMap<String, Object>();map.put("date", "2019年10月9日13:28:28");excelWriter.fill(map, writeSheet);// 别忘记关闭流excelWriter.finish();}

多列表组合填充

模版

效果

代码

   /*** 多列表组合填充填充** @since 2.2.0-beta1*/@Testpublic void compositeFill() {// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替// {} 代表普通变量 {.} 代表是list的变量 {前缀.} 前缀可以区分不同的listString templateFileName =TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "composite.xlsx";String fileName = TestFileUtil.getPath() + "compositeFill" + System.currentTimeMillis() + ".xlsx";ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();// 如果有多个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<String, Object> map = new HashMap<String, Object>();map.put("date", "2019年10月9日13:28:28");excelWriter.fill(map, writeSheet);// 别忘记关闭流excelWriter.finish();}

EasyExcel · 填充Excel相关推荐

  1. easyexcel填充excel模板数据,多sheet采用不同方式进行填充

    废话不多说,直奔主题,本次是需要在一个包含2个sheet的excel模板中填充数据 easyexcel版本号为 2.2.10 springboot版本号 2.3.8.RELEASE 模板文件需要放在项 ...

  2. EasyExcel的使用--填充excel

    EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目. 今天根据官网(www.yuque.com/easyexcel/doc/read)指导,试了一个简单的填充例子,如下. 了 ...

  3. 【EasyExcel 教程】详解填充Excel -- 填充

    愿你如阳光,明媚不忧伤. 目録 5. 详解填充Excel 5.1 简单填充Excel 5.2 填充列表 5.3 复杂的填充 5.4 横向的填充 5.5 多列表组合填充 5. 详解填充Excel 5.1 ...

  4. EasyExcel实现Excel文件导入导出功能

    一.EasyExcel简介 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不大的话可能还行,但是一旦并发 ...

  5. EasyExcel填充web下载

    文章目录 一.前言 二.实践 模板 导出 代码实践 一.前言 官网 在使用官网的填充功能的时候,个人感觉还是挺好用的.官网的web下载示例只给了最简单的写的对象让后进行导出.我的需求使用填充在下载,但 ...

  6. EasyExcel实现Excel文件导入导出

    1 EasyExcel简介 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址: https://git ...

  7. 使用EasyExcel从Excel表格读取链接地址下载文件

    使用easyExcel读取excel表格,再读取excel表格中的链接地址下载文件到本地. 1.引入easyexcel依赖 <dependency><groupId>com.a ...

  8. easyExcel导出excel文件并打包成zip压缩包下载

    文件导出 专栏收录该内容 2 篇文章0 订阅 订阅专栏 package com.business.testExcelPort; import java.io.BufferedInputStream; ...

  9. 使用Easyexcel对Excel进行读写操作

    1.概述 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:GitHub - alibaba/easy ...

最新文章

  1. 图神经网络:方法与应用 | 一文展望,四大待解问题
  2. Scala协变与Java泛型
  3. 聊天秒回的人都是生命之光 诉言网
  4. 【AI白身境】深度学习必备图像基础
  5. 【Tomcat】解决GET方式传递的参数(URL中的参数)乱码问题
  6. 【测试点分析】1088 三人行 (20分)_29行代码AC
  7. 个人项目api接口_5个免费有趣的API,可用于学习个人项目等
  8. (16)Verilog模块例化-基本语法(四)(第4天)
  9. 这次,Python 厉害了!
  10. k8s部署nexus3
  11. OpenStack实验:创建虚拟机的问题
  12. Mac下载工具哪个好?迅雷 for Mac是个不错的选择!
  13. 基于STM32F405平台的多摩川协议编码器通讯过程(1)
  14. 走进中关村软件园-光环敏捷PMI-ACP落地分享会
  15. 近而立之年了,老程序员如何建立自己的护城河
  16. WebKit介绍及总结(一)
  17. 程序员段子:电脑在手,代码我有!
  18. 《天下无谋》读后感 --- 度心术卷1度心篇
  19. Python——列表的方法
  20. 证件照的尺寸规格和像素要求

热门文章

  1. ISO20000认证材料大全
  2. 按计算机的用途分类可将电子计算机分为,第一章 计算机基础知识
  3. 发生交通事故处理过后还可以报警吗
  4. office365在win7上使用订阅+win7在线升级win10就用它(亲测有效)
  5. vue 前端表格导入与导出
  6. 阿里云总裁胡晓明40个精彩回答 涉及CDN、价格战、生态竞争等
  7. 《电工学上》知识点整理(猴博士)
  8. 【刷题记录①】Java从0到1入门|基础知识巩固练习
  9. 高等数学(下)知识点总结(2)
  10. Animate中如何创建辅助线