springboot整合Excel填充数据

填充一组数据

准备模板

封装数据

java 复制代码
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;
        }
}

类填充形式

java 复制代码
    @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形式填充

java 复制代码
 @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);
    }

结果

填充多组数据

准备模板

注意模板里面与上面相比是多了.的

封装数据

与上面一样,省略。

填充

java 复制代码
@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);
    }

结果

组合填充

准备模板

即有多组数据填充,又有单一数据填充 。

封装数据

同上。

填充

java 复制代码
 @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对象设置水平填充。

封装数据

同上

填充

java 复制代码
@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接口
相关推荐
小周不摆烂1 小时前
Java Web从入门到精通:全面探索与实战(一)
java
Source.Liu1 小时前
【学Rust写CAD】25 变量类(variable.rs)
后端·rust
cherryc_1 小时前
JavaSE基础——第六章 类与对象(二)
java·开发语言
快来卷java1 小时前
JVM虚拟机篇(三):JVM运行时数据区与方法区详解
java·jvm·mysql
whltaoin2 小时前
Java实现N皇后问题的双路径探索:递归回溯与迭代回溯算法详解
java·算法
nlog3n4 小时前
Java策略模式详解
java·bash·策略模式
冷琅辞6 小时前
Elixir语言的云计算
开发语言·后端·golang
Mryan20057 小时前
解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution
java·开发语言·spring boot·maven
VX_CXsjNo17 小时前
免费送源码:Java+SSM+Android Studio 基于Android Studio游戏搜索app的设计与实现 计算机毕业设计原创定制
java·spring boot·spring·游戏·eclipse·android studio·android-studio
ylfhpy7 小时前
Java面试黄金宝典33
java·开发语言·数据结构·面试·职场和发展·排序算法