【EasyExcel 教程】详解填充Excel -- 填充
愿你如阳光,明媚不忧伤。
目録
- 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 -- 填充相关推荐
- EasyExcel使用详解与源码解读
EasyExcel使用详解 1.EasyExcel简单介绍 64M内存20秒读取75M(46W行25列)的Excel(3.0.2+版本) 2.EasyExcel和POI数据处理能力对比 3.使用Eas ...
- 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 ...
- es springboot 不设置id_es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解
注意:适用于springboot或者springcloud框架 1.首先下载相关文件 2.然后需要去启动相关的启动文件 3.导入相关jar包(如果有相关的依赖包不需要导入)以及配置配置文件,并且写一个 ...
- GitHub使用教程详解——官网操作指南(翻译)
GitHub使用教程详解--官网操作指南(翻译) GitHub使用指南 原文地址:GitHub官网 示例项目:Hello World 十分钟轻松教学 在学习计算机语言编程的过程中创建Hello Wor ...
- SAE上传web应用(包括使用数据库)教程详解及问题解惑
2019独角兽企业重金招聘Python工程师标准>>> 转自:http://blog.csdn.net/baiyuliang2013/article/details/24725995 ...
- golang导入git包_使用go module导入本地包的方法教程详解
go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具.到今天 Go1.14 版本推出之后 Go mod ...
- Linux redis安装教程,Linux 下redis5.0.0安装教程详解
Linux redis5.0.0安装,教程如下所示: 1.从官网下载,然后传到服务器,tar -zxvf解压 2.进入redis ? 3.安装:make, (1)若提示:: gcc: Command ...
- windows上安装Anaconda和python的教程详解
一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...
- python安装教程windows-windows上安装Anaconda和python的教程详解
一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...
- python3.8.1安装教程-Linux安装Python3.8.1的教程详解
本例以Linux上安装Pyhton3.8版本为例进行说明 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-dev ...
最新文章
- 嵌入式Linux开发环境的搭建
- 注意:python flask 里image文件 css文件 html文件都必须有固定存放位置!
- 国家电网是“围城”?辞职吗?
- Zend Debugger 配置
- django-后台管理-编辑页的选项
- 正则获取前8位数字_数据取整,获取字符串前数字另辟蹊径之LOOKUP
- 静止一秒_生命静止前的那一秒,我们并不是无能为力...
- 有哪些网站是django开发的_网站模板建设和定制开发哪个好,有哪些区别?
- Mysql集群拆分_MySQL 5.7跨集群拆分迁移
- 【剑指 offer】(二十一)—— 包含 min 函数的栈
- 手机闹钟软件测试用例,手机app测试用例.docx
- datax(27):不太常见配置项querySql、preSql、postSql、splitPk
- 前端通信实现l聊天室
- easyPOI之动态导出word模板
- C++ Primer Plus学习:第十三章
- Java集成Sap/Erp产生的sapjco包重命名/rename问题及解决方案
- idea jdk版本设置
- OSChina 周五乱弹 ——晒晒十大祖师爷级计算机写真
- 1072:鸡尾酒疗法(C C++)
- 读取应用程序/类库配置文件(比如***.dll.config)的方法小结