三EasyExcel实现数据填充
Posted 上善若水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三EasyExcel实现数据填充相关的知识,希望对你有一定的参考价值。
一、填充
1.1、填充一组数据
准备模板
excel表格中用来表示包裹要填充的变量,如果单元格文本中本来就有
、
左右大括号,需要在括号前面使用斜杠转义
\\
、\\
。
代码中被填充数据的实体对象的成员变量名或被填充map集合的key需要和excel中被包裹的变量名称一致。
项目结构
封装数据
package com.xbmu.pojo;
import lombok.Data;
/**
* 使用实体类封装填充数据
*
* 实体中成员变量名称需要和Excel表各种包裹的变量名匹配
*/
@Data
public class FillData
private String name;
private int age;
填充
准备数据并填充到文件
Test1.java
@Test
public void test3()
// 加载模板
String templateFile = "fill_data_template1.xlsx";
// 写入文件
String targetFileName = "Excel填充—单组数据.xlsx";
// 准备对象数据填充
FillData fillData = new FillData();
fillData.setName("张三");
fillData.setAge(10);
// 生成工作簿对象
ExcelWriterBuilder workBookWriter = EasyExcel.write(targetFileName,FillData.class)
.withTemplate(templateFile);
// 获取工作表并填充
workBookWriter.sheet().doFill(fillData);
运行结果
同时,也可以组转map数据去填充
@Test
public void test3()
// 加载模板
String templateFile = "fill_data_template1.xlsx";
// 写入文件
String targetFileName = "Excel填充—单组数据.xlsx";
// 准备Map数据填充
HashMap<String, String> mapFillData = new HashMap<>();
mapFillData.put("name", "李四");
mapFillData.put("age", "11");
// 获取第一个工作表填充并自动关闭流
// 生成工作簿对象
ExcelWriterBuilder workBookWriter = EasyExcel.write(targetFileName)
.withTemplate(templateFile);
// 获取工作表并填充
workBookWriter.sheet().doFill(mapFillData);
1.2、填充多组数据
准备模板
excel表格中用.
来表示包裹要填充的变量,如果单元格文本中本来就有、
左右大括号,需要在括号前面使用斜杠转移
\\
、\\
。
代码中被填充数据的实体对象的成员变量名或被填充map集合的key需要和excel中被包裹的变量名称一致。
准备数据并填充
@Test
public void test4()
// 加载模板
String templateFile = "fill_data_template2.xlsx";
// 写入文件
String targetFileName = "Excel填充—多组数据.xlsx";
// 生成工作簿对象
ExcelWriterBuilder workBookWriter = EasyExcel.write(targetFileName)
.withTemplate(templateFile);
// 创建工作表对象
ExcelWriterSheetBuilder sheet = workBookWriter.sheet();
// 准备数据
List<Student> students = initData();
// 填充数据,doXxx会在读写结束后自动关闭流
sheet.doFill(students);
/**
* 生成多组数据代码
* @return
*/
private static List<FillData> initFillData()
ArrayList<FillData> fillDatas = new ArrayList<FillData>();
for (int i = 0; i < 10; i++)
FillData fillData = new FillData();
fillData.setName("李四0" + i);
fillData.setAge(10 + i);
fillDatas.add(fillData);
return fillDatas;
运行结果
1.3、组合填充
准备模板
既有多组数据填充,又有单一数据填充,为了避免两者数据出现冲突覆盖的情况,在多组填充时需要通过FillConfig
对象设置换行。
封装数据并填充
@Test
public void test5()
// 加载模板
String templateFile = "fill_data_template3.xlsx";
// 写入文件
String targetFileName = "Excel填充—组合数据.xlsx";
// 创建一个工作簿对象
ExcelWriter workBook = EasyExcel.write(targetFileName).withTemplate(templateFile).build();
// 创建工作表对象
WriteSheet sheet = EasyExcel.writerSheet().build();
// 准备数据
List<FillData> fillDatas = initFillData();
Map<String,Object> dateAndTotal = new HashMap<>();
dateAndTotal.put("date","2021-11-24");
dateAndTotal.put("total","1223");
// 多组数据填充
workBook.fill(fillDatas,sheet);
// 单组数据填充
workBook.fill(dateAndTotal,sheet);
// 关闭流 !!!
workBook.finish();
运行结果
第三行有问题
运行结果:
1.4、水平填充
水平填充和多组填充模板一样,不一样的地方在于填充时需要通过FillConfig
对象设置水平填充。
准备数据并填充
@Test
public void test6()
// 加载模板
String templateFile = "fill_data_template4.xlsx";
// 写入文件
String targetFileName = "Excel填充—水平填充.xlsx";
// 创建一个工作簿对象
ExcelWriter workBook = EasyExcel.write(targetFileName).withTemplate(templateFile).build();
// 创建工作表对象
WriteSheet sheet = EasyExcel.writerSheet().build();
// 换行
FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
// 准备数据
List<FillData> fillDatas = initFillData();
// 多组数据填充
workBook.fill(fillDatas,fillConfig,sheet);
// 关闭流 !!!
workBook.finish();
运行结果
1.5、综合案例
注意: 为了节省内存,没有采用把整个文档在内存中组织好之后再整体写入到文件的做法,而是采用的是一行一行写入的方式,不能实现删除和移动行,也不支持备注写入。多组数据写入的时候,如果需要新增行,最好在最后一行增加,尽量不要在中间位置添加。
项目结构:
准备数据并填充:
package com.xbmu.test;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.xbmu.pojo.FillData;
import com.xbmu.pojo.Student;
import java.io.InputStream;
import java.util.*;
public class Test01
public static void main(String[] args)
InputStream templateInputStream = Test01.class.getClassLoader().getResourceAsStream(
"template/report_template.xlsx");
// 目标文件
String targetFile = "综合练习-report.xlsx";
// 写入workbook对象
ExcelWriter workBook = EasyExcel.write(targetFile).withTemplate(templateInputStream).build();
WriteSheet sheet = EasyExcel.writerSheet().build();
// 填充配置,开启组合填充换行
//FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
// ****** 准备数据 *******
// 日期
HashMap<String, String> dateMap = new HashMap<>();
dateMap.put("date", "2020-03-16");
// 总会员数
HashMap<String, String> totalCountMap = new HashMap<>();
dateMap.put("totalCount", "1000");
// 新增员数
HashMap<String, String> increaseCountMap = new HashMap<>();
dateMap.put("increaseCount", "100");
// 本周新增会员数
HashMap<String, String> increaseCountWeekMap = new HashMap<>();
dateMap.put("increaseCountWeek", "50");
// 本月新增会员数
HashMap<String, String> increaseCountMonthMap = new HashMap<>();
dateMap.put("increaseCountMonth", "100");
// 新增会员数据
List<Student> students = initData();
// **** 准备数据结束****
// 写入统计数据
workBook.fill(dateMap, sheet);
workBook.fill(totalCountMap, sheet);
workBook.fill(increaseCountMap, sheet);
workBook.fill(increaseCountWeekMap, sheet);
workBook.fill(increaseCountMonthMap, sheet);
// 写入新增会员
workBook.fill(students, sheet);
workBook.finish();
private static List<Student> initData()
ArrayList<Student> students = new ArrayList<>();
for (int i = 0; i < 10; i++)
Student data = new Student();
data.setName("王五0" + i);
data.setBirthday(new Date());
data.setGender("男");
students.add(data);
return students;
运行结果:
以上是关于三EasyExcel实现数据填充的主要内容,如果未能解决你的问题,请参考以下文章