springboot整合Excel填充数据代码示例
作者:无语堵上西楼
填充一组数据
准备模板
封装数据
import java.util.ArrayList; import java.util.List; /** * 使用实体类封装填充数据 * * 实体中成员变量名称需要和Excel表各种{}包裹的变量名匹配 */ @Data public class FillData { private String name; private int age; // 生成多组数据代码 public 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; } }
类填充形式
@Test public void test1(){ // 加载模板 String templateFile="src/main/resources/excel/templte/fill_data_template1.xlsx"; // 写入文件 String targetFileName = "单组数据填充.xlsx"; // 准备对象数据填充 FillData fillData = new FillData(); fillData.setName("学生1"); fillData.setAge(10); // 生成工作簿对象 ExcelWriterBuilder workBookWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile); // 获取工作表并填充 workBookWriter.sheet().doFill(fillData); }
Map形式填充
@Test public void test1(){ // 加载模板 String templateFile="src/main/resources/excel/templte/fill_data_template1.xlsx"; // 写入文件 String targetFileName = "单组数据填充.xlsx"; // 生成工作簿对象 ExcelWriterBuilder workBookWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile); // 使用Map数据填充 HashMap<String, String> mapFillData = new HashMap<>(); mapFillData.put("name", "学生1"); mapFillData.put("age", "11"); // 获取第一个工作表填充并自动关闭流 workBookWriter.sheet().doFill(mapFillData); }
结果
填充多组数据
准备模板
注意模板里面与上面相比是多了.的
封装数据
与上面一样,省略。
填充
@Test public void test02(){ // 加载模板 String templateFile="src/main/resources/excel/templte/fill_data_template2.xlsx"; // 写入文件 String targetFileName = "多组数据填充.xlsx"; List<FillData> fillDatas = FillData.initFillData(); System.out.println(fillDatas); // 生成工作簿对象 ExcelWriterBuilder workBookWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile); // 获取第一个工作表填充并自动关闭流 workBookWriter.sheet().doFill(fillDatas); }
结果
组合填充
准备模板
即有多组数据填充,又有单一数据填充 。
封装数据
同上。
填充
@Test public void test03(){ // 加载模板 String templateFile="src/main/resources/excel/templte/fill_data_template3.xlsx"; // 目标文件 String targetFileName = "组合数据填充.xlsx"; List<FillData> fillDatas = FillData.initFillData(); // 生成工作簿对象 ExcelWriter excelWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile).build(); // 生成工作表对象 WriteSheet writeSheet = EasyExcel.writerSheet().build(); // 组合填充时,因为多组填充的数据量不确定,需要在多组填充完之后另起一行 FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build(); // 填充并换行 excelWriter.fill(fillDatas, fillConfig, writeSheet); HashMap<String, String> otherData = new HashMap<>(); otherData.put("date", "2020-03-14"); otherData.put("total", "100"); excelWriter.fill(otherData, writeSheet); // 关闭 excelWriter.finish(); }
结果
水平填充
准备模板
水平填充和多组填充模板一样,不一样的地方在于,填充时需要通过 FillConfig
对象设置水平填充。
封装数据
同上
填充
@Test public void test04(){ // 加载模板 String templateFile="src/main/resources/excel/templte/fill_data_template4.xlsx"; // 写入文件 String targetFileName = "水平数据填充.xlsx"; List<FillData> fillDatas = FillData.initFillData(); // 生成工作簿对象 ExcelWriter excelWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile).build(); // 生成工作表对象 WriteSheet writeSheet = EasyExcel.writerSheet().build(); // 组合填充时,因为多组填充的数据量不确定,需要在多组填充完之后另起一行 FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); // 填充 excelWriter.fill(fillDatas, fillConfig, writeSheet); // 关闭 excelWriter.finish(); }
结果
资料
常用类
EasyExcel 入口类,用于构建开始各种操作;
ExcelReaderBuilder 构建出一个ReadWorkbook对象,即一个工作簿对象,对应的是一个Excel文件;
ExcelWriterBuilder 构建出一个WriteWorkbook对象,即一个工作簿对象,对应的是一个Excel文件;
ExcelReaderSheetBuilder 构建出一个ReadSheet对象,即一个工作表的对象,对应的Excel中的每个sheet,一个工作簿可以有多个工作表;
ExcelWriterSheetBuilder 构建出一WriteSheet对象,即一个工作表的对象,对应的Excel中的每个sheet,一个工作簿可以有多个工作表;
ReadListener 在每一行读取完毕后都会调用ReadListener来处理数据,我们可以把调用service的代码可以写在其invoke方法内部;
WriteHandler 在每一个操作包括创建单元格、创建表格等都会调用WriteHandler来处理数据,对使用者透明不可见;
所有配置都是继承的 Workbook的配置会被Sheet继承。所以在用EasyExcel设置参数的时候,在EasyExcel…sheet()方法之前作用域是整个sheet,之后针对单个sheet。
读取时的注解
@ExcelProperty
属性名 | 含义 | 说明 |
---|---|---|
index | 对应Excel表中的列数 | 默认-1,建议指定时从0开始 |
value | 对应Excel表中的列头 | |
converter | 成员变量转换器 | 自定义转换器需要实Converter接口 |
@ExcelIgnore
标注在成员变量上,默认所有字段都会和excel去匹配,加了这个注解会忽略该字段
@DateTimeFormat
标注在成员变量上,日期转换,代码中用 String类型的成员变量
去接收 excel中日期格式的数据
会调用这个注解。里面的 value
参照 java.text.SimpleDateFormat
@NumberFormat
标注在成员变量上,数字转换,代码中用 String类型的成员变量
去接收 excel数字格式的数据
会调用这个注解。里面的 value
参照 java.text.DecimalFormat
@ExcelIgnoreUnannotated
标注在类上。不标注该注解时,默认类中所有成员变量都会参与读写,无论是否在成员变量上加了@ExcelProperty
的注解。标注该注解后,类中的成员变量如果没有标注@ExcelProperty
注解将不会参与读写。
@ExcelProperty
属性名 | 含义 | 说明 |
---|---|---|
index | 对应Excel表中的列数 | 默认-1,指定时建议从0开始 |
value | 对应Excel表中的列头 | |
converter | 成员变量转换器 | 自定义转换器需要实Converter接口 |
总结
到此这篇关于springboot整合Excel填充数据的文章就介绍到这了,更多相关springboot整合Excel填充数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!