愿你如阳光,明媚不忧伤。

目録

  • 5. 详解填充Excel
    • 5.1 简单填充Excel
    • 5.2 填充列表
    • 5.3 复杂的填充
    • 5.4 横向的填充
    • 5.5 多列表组合填充

5. 详解填充Excel

5.1 简单填充Excel

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。

  • EasyExcelData.java
    创建与Excel模板相对应的实体类。

public class EasyExcelFillData {private String name;private Double age;// 省略get和set
}
  • EasyExcelDataController.java
    填充Excel,这里提供两种方式填充
@RestController
@RequestMapping("/easyExcel")
public class EasyExcelDataController extends BaseController {@ResourceEasyExcelDataListener easyExcelDataListener;// 指定需要读的excel文件String fileName = "C:/Users/ISCCF_A/Desktop/EasyExcelData.xlsx";// 省略读取和写入部分@RequestMapping("/fill")public JsonResult<? extends Object> simpleFill(int mode) {log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));// Excel模板文件String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";// 要填充的文件String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";if (mode == 1) {// 方案1 根据对象填充// 这里会填充到第一个sheet,然后文件流会自动关闭EasyExcelFillData fillData = new EasyExcelFillData();fillData.setName("张三");fillData.setAge(24.2);EasyExcel.write(fillAimFileName).withTemplate(templateFileName).sheet().doFill(fillData);log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));return new JsonResult<EasyExcelFillData>(fillData, "Excel填充数据成功!");} else {// 方案2 根据Map填充// 这里会填充到第一个sheet,然后文件流会自动关闭Map<String, Object> map = new HashMap<String, Object>();map.put("name", "李四");map.put("age", 26.5);EasyExcel.write(fillAimFileName).withTemplate(templateFileName).sheet().doFill(map);log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));return new JsonResult<Map<String, Object>>(map, "Excel填充数据成功!");}}
}

浏览器访问 http://localhost:8080/easyExcel/fill?mode=1

  • EasyExcelFillAimFile.xlsx

5.2 填充列表

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。 模板中{.} 多了个点,表示list。

  • EasyExcelUtil.java
    创建填充数据
public class EasyExcelUtil {public static List<EasyExcelFillData> testFillData() {List<EasyExcelFillData> list = new ArrayList<>();for (int i = 0; i < 10; i++) {EasyExcelFillData data = new EasyExcelFillData();data.setName("OUSEKI" + i);data.setAge(18 + i * Math.random());list.add(data);}return list;}
}
  • EasyExcelDataFillController.java
@RestController
@RequestMapping("/easyExcelFill")
public class EasyExcelDataFillController extends BaseController {// Excel模板文件String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";// 要填充的文件String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";// 写入Excel的数据List<EasyExcelFillData> list = EasyExcelUtil.testFillData();@RequestMapping("/listFill")public void listFill(int mode) {log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));if (mode == 1) {// 方案1:一下子全部放到内存里面并填充// 这里会填充到第一个sheet, 然后文件流会自动关闭EasyExcel.write(fillAimFileName).withTemplate(templateFileName).sheet().doFill(list);} else {// 方案2:分多次填充,会使用文件缓存(省内存)ExcelWriter excelWriter = EasyExcel.write(fillAimFileName).withTemplate(templateFileName).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();excelWriter.fill(list, writeSheet);// 可以填充另一个文件中的内容,我这里没做额外数据excelWriter.fill(list, writeSheet);// 千万别忘记关闭流excelWriter.finish();}log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));}
}

浏览器访问 http://localhost:8080/easyExcelFill/listFill?mode=10

5.3 复杂的填充

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。 模板中{.} 多了个点,表示list。

  • EasyExcelDataFillController.java
@RestController
@RequestMapping("/easyExcelFill")
public class EasyExcelDataFillController extends BaseController {// Excel模板文件String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";// 要填充的文件String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";// 写入Excel的数据List<EasyExcelFillData> list = EasyExcelUtil.testFillData();@RequestMapping("/complexFill")public void complexFill() {log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));ExcelWriter excelWriter = EasyExcel.write(fillAimFileName).withTemplate(templateFileName).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();// 这里注意,入参用了forceNewRow,代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。// forceNewRow如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用!// 简单的说,如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存,会很耗内存。FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();excelWriter.fill(list, fillConfig, writeSheet);Map<String, Object> map = new HashMap<String, Object>();map.put("date", new Date());map.put("total", 1000);excelWriter.fill(map, writeSheet);excelWriter.finish();log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));}
}

浏览器访问 http://localhost:8080/easyExcelFill/complexFill

5.4 横向的填充

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。 模板中{.} 多了个点,表示list。

  • EasyExcelDataFillController.java
@RestController
@RequestMapping("/easyExcelFill")
public class EasyExcelDataFillController extends BaseController {// Excel模板文件String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";// 要填充的文件String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";// 写入Excel的数据List<EasyExcelFillData> list = EasyExcelUtil.testFillData();@RequestMapping("/horizontalFill")public void horizontalFill() {log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));ExcelWriter excelWriter = EasyExcel.write(fillAimFileName).withTemplate(templateFileName).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();excelWriter.fill(list, fillConfig, writeSheet);Map<String, Object> map = new HashMap<String, Object>();map.put("date", new Date());excelWriter.fill(map, writeSheet);// 别忘记关闭流excelWriter.finish();log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));}
}

浏览器访问 http://localhost:8080/easyExcelFill/horizontalFill

5.5 多列表组合填充

  • EasyExcelTemplateFile.xlsx
    先在excel模板文件中设定好模板样式。注意:{}前面加上转义符\会忽略该属性。 模板中{.} 多了个点,表示list。

  • EasyExcelDataFillController.java
@RestController
@RequestMapping("/easyExcelFill")
public class EasyExcelDataFillController extends BaseController {// Excel模板文件String templateFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelTemplateFile.xlsx";// 要填充的文件String fillAimFileName = "C:/Users/ISCCF_A/Desktop/EasyExcelFillAimFile.xlsx";// 写入Excel的数据List<EasyExcelFillData> list = EasyExcelUtil.testFillData();@RequestMapping("/compositeFill")public void compositeFill() {log.info(startLog(Thread.currentThread().getStackTrace()[1].getMethodName()));ExcelWriter excelWriter = EasyExcel.write(fillAimFileName).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", list), fillConfig, writeSheet);excelWriter.fill(new FillWrapper("data2", list), writeSheet);excelWriter.fill(new FillWrapper("data3", list), writeSheet);Map<String, Object> map = new HashMap<String, Object>();map.put("date", new Date());excelWriter.fill(map, writeSheet);// 别忘记关闭流excelWriter.finish();log.info(endLog(Thread.currentThread().getStackTrace()[1].getMethodName()));}
}

浏览器访问 http://localhost:8080/easyExcelFill/compositeFill

【EasyExcel 教程】详解填充Excel -- 填充相关推荐

  1. EasyExcel使用详解与源码解读

    EasyExcel使用详解 1.EasyExcel简单介绍 64M内存20秒读取75M(46W行25列)的Excel(3.0.2+版本) 2.EasyExcel和POI数据处理能力对比 3.使用Eas ...

  2. linux卸载hadoop版本,centos6.5 安装hadoop1.2.1的教程详解【亲测版】

    本篇只简单介绍安装步骤 1. 角色分配 10.11.84.4 web-crawler--1.novalocal master/slave 10.11.84.5 web-crawler--2.noval ...

  3. es springboot 不设置id_es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    注意:适用于springboot或者springcloud框架 1.首先下载相关文件 2.然后需要去启动相关的启动文件 3.导入相关jar包(如果有相关的依赖包不需要导入)以及配置配置文件,并且写一个 ...

  4. GitHub使用教程详解——官网操作指南(翻译)

    GitHub使用教程详解--官网操作指南(翻译) GitHub使用指南 原文地址:GitHub官网 示例项目:Hello World 十分钟轻松教学 在学习计算机语言编程的过程中创建Hello Wor ...

  5. SAE上传web应用(包括使用数据库)教程详解及问题解惑

    2019独角兽企业重金招聘Python工程师标准>>> 转自:http://blog.csdn.net/baiyuliang2013/article/details/24725995 ...

  6. golang导入git包_使用go module导入本地包的方法教程详解

    go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具.到今天 Go1.14 版本推出之后 Go mod ...

  7. Linux redis安装教程,Linux 下redis5.0.0安装教程详解

    Linux redis5.0.0安装,教程如下所示: 1.从官网下载,然后传到服务器,tar -zxvf解压 2.进入redis ? 3.安装:make, (1)若提示:: gcc: Command ...

  8. windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  9. python安装教程windows-windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  10. python3.8.1安装教程-Linux安装Python3.8.1的教程详解

    本例以Linux上安装Pyhton3.8版本为例进行说明 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-dev ...

最新文章

  1. 嵌入式Linux开发环境的搭建
  2. 注意:python flask 里image文件 css文件 html文件都必须有固定存放位置!
  3. 国家电网是“围城”?辞职吗?
  4. Zend Debugger 配置
  5. django-后台管理-编辑页的选项
  6. 正则获取前8位数字_数据取整,获取字符串前数字另辟蹊径之LOOKUP
  7. 静止一秒_生命静止前的那一秒,我们并不是无能为力...
  8. 有哪些网站是django开发的_网站模板建设和定制开发哪个好,有哪些区别?
  9. Mysql集群拆分_MySQL 5.7跨集群拆分迁移
  10. 【剑指 offer】(二十一)—— 包含 min 函数的栈
  11. 手机闹钟软件测试用例,手机app测试用例.docx
  12. datax(27):不太常见配置项querySql、preSql、postSql、splitPk
  13. 前端通信实现l聊天室
  14. easyPOI之动态导出word模板
  15. C++ Primer Plus学习:第十三章
  16. Java集成Sap/Erp产生的sapjco包重命名/rename问题及解决方案
  17. idea jdk版本设置
  18. OSChina 周五乱弹 ——晒晒十大祖师爷级计算机写真
  19. 1072:鸡尾酒疗法(C C++)
  20. 读取应用程序/类库配置文件(比如***.dll.config)的方法小结

热门文章

  1. lay-submit
  2. 按键精灵--日志记录功能和释放附件功能
  3. 对于gta5加mod的一些记录
  4. 2022-2028全球金属旋压产品行业调研及趋势分析报告
  5. 决定一个人成功的七大特质!
  6. delphi选择打印机:Delphi中获取打印机设备
  7. 网络嗅探器(Sniffer)的原理与实现(1)
  8. 2017.3.25NOIP模拟测试
  9. matlab主要功能,matlab主要功能
  10. 微信小程序录音 第一篇 (基于微信小程序及百度AI的 人员语音识别转文字显示小程序)