EasyExcel(读取操作和填充操作)

文章目录

1.准备Read.xlsx(具有两个sheet)

2.读取第一个sheet中的数据

1.模板
java 复制代码
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class DemoData {
    // 根据Excel中指定列名或列的索引读取
    @ExcelProperty(value = "字符串标题")
    private String name;
    @ExcelProperty(value = "日期标题")
    private Date hireDate;
    @ExcelProperty(value = "数字标题")
    private Double salary;
}
2.方法
java 复制代码
/**
 * 读取第一个sheet中的数据
 */
@Test
public void testRead01() {
    // 读取文件路径
    String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Read.xlsx";
    // 存储解析的数据
    List<DemoData> demoDataArrayList = new ArrayList<>();
    // 1.创建read
    ExcelReader excelReader = EasyExcel.read(fileName)
            .build();
    // 2.创建sheet
    ReadSheet sheetOne = EasyExcel.readSheet(0)
            .head(DemoData.class)
            .registerReadListener(new AnalysisEventListener<DemoData>() {
                @Override
                public void invoke(DemoData demoData, AnalysisContext analysisContext) {
                    demoDataArrayList.add(demoData);
                }

                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                    System.out.println("解析完成一个sheet...");
                }
            })
            .build();
    // 参数为可变参数,可以读取多个sheet
    excelReader.read(sheetOne);
    // 必须关闭流,否则会出现内存泄漏
    excelReader.finish();
    // 输出所有解析的数据
    System.out.println("所有解析的数据为:");
    demoDataArrayList.forEach(System.out::println);
}
3.结果

3.读取所有sheet中的数据

1.模板
java 复制代码
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class DemoData {
    // 根据Excel中指定列名或列的索引读取
    @ExcelProperty(value = "字符串标题")
    private String name;
    @ExcelProperty(value = "日期标题")
    private Date hireDate;
    @ExcelProperty(value = "数字标题")
    private Double salary;
}
2.方法
java 复制代码
/**
 * 读取所有sheet中的数据
 */
@Test
public void testRead02() {
    // 读取文件路径
    String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Read.xlsx";
    // 存储解析的数据
    List<DemoData> demoDataArrayList = new ArrayList<>();
    // 直接使用EasyExcel读取excel
    ExcelReader excelReader = EasyExcel.read(fileName, DemoData.class, new AnalysisEventListener<DemoData>() {
        // 每解析一行数据,该方法会被调用一次
        @Override
        public void invoke(DemoData demoData, AnalysisContext analysisContext) {
            demoDataArrayList.add(demoData);
        }

        // 解析完成一个sheet后被调用
        @Override
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
            System.out.println("解析完成一个sheet...");
            // 可以将解析的数据保存到数据库
        }
    }).build();
    excelReader.readAll(); // 读所有sheet
    // 必须关闭流,否则会出现内存泄漏
    excelReader.finish();
    // 输出所有解析的数据
    System.out.println("所有解析的数据为:");
    demoDataArrayList.forEach(System.out::println);
}
3.结果

EasyExcel填充

1.简单填充

1.准备 Fill01.xlsx
2.无模版
3.方法
java 复制代码
/**
 * 简单填充
 */
@Test
public void testFill01() {
    // 选择要填充的模板
    String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill01.xlsx";
    // 选择填充后的文件
    String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill01_end.xlsx";
    // 1.创建write
    ExcelWriter excelWriter = EasyExcel.write(filledFileName)
            .withTemplate(templateFileName)
            .build();
    // 2.创建sheet
    WriteSheet writeSheet = EasyExcel.writerSheet()
            .sheetNo(0)
            .build();
    // 3.构建数据
    Map<String, Object> data = new HashMap<>();
    data.put("name", "张三");
    data.put("age", 20);
    data.put("birthday", new Date());
    // 4.填充数据
    excelWriter.fill(data, writeSheet);
    // 5.关闭流
    excelWriter.finish();
}
4.结果

2.列表填充

1.准备 Fill02.xlsx
2.模板
java 复制代码
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Fill02 {
        private String name;
        private Double number;
    }
3.方法
java 复制代码
    /**
     * 列表填充
     */
    @Test
    public void testFill02() {
        // 选择要填充的模板
        String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill02.xlsx";
        // 选择填充后的文件
        String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill02_end.xlsx";
        // 1.创建write
        ExcelWriter excelWriter = EasyExcel.write(filledFileName)
                .withTemplate(templateFileName)
                .build();
        // 2.创建sheet
        WriteSheet writeSheet = EasyExcel.writerSheet()
                .sheetNo(0)
                .build();
        // 3.构建数据
        List<Fill02> data = new ArrayList<>();
        data.add(Fill02.builder()
                .name("张三")
                .number(100.0)
                .build());
        data.add(Fill02.builder()
                .name("李四")
                .number(200.0)
                .build());
        data.add(Fill02.builder()
                .name("王五")
                .number(300.0)
                .build());
        // 4.填充数据
        excelWriter.fill(data, writeSheet);
        // 5.关闭流
        excelWriter.finish();
    }
4.结果

3.组合填充

1.准备 Fill03.xlsx
2.模板
java 复制代码
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Fill03 {
        private String name;
        private Integer age;
    }
3.方法
java 复制代码
/**
 * 组合填充
 */
@Test
public void testFill03() {
    // 选择要填充的模板
    String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill03.xlsx";
    // 选择填充后的文件
    String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill03_end.xlsx";

    // 1.创建write
    ExcelWriter excelWriter = EasyExcel.write(filledFileName)
            .withTemplate(templateFileName)
            .build();
    // 2.创建sheet
    WriteSheet writeSheet = EasyExcel.writerSheet()
            .sheetNo(0)
            .build();
    // 3.构建数据
    // 3.1 构建数据1
    Map<String, Object> data1 = new HashMap<>();
    data1.put("time", new Date());
    data1.put("num", 2);
    // 3.2 构建数据2
    List<Fill03> data2 = new ArrayList<>();
    data2.add(Fill03.builder().name("张三").age(20).build());
    data2.add(Fill03.builder().name("李四").age(21).build());
    // 填充配置,换行填充(混合填充必备配置)
    FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
    // 4.填充数据
    excelWriter.fill(data1, fillConfig, writeSheet);
    excelWriter.fill(data2, fillConfig, writeSheet);
    // 5.关闭流
    excelWriter.finish();
}
4.结果

4.水平填充

1.准备 Fill04.xlsx
2.模板
java 复制代码
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Fill04 {
    private String name;
    private Integer age;
}
3.方法
java 复制代码
    /**
     * 水平填充
     */
    @Test
    public void testFill04() {
        // 选择要填充的模板
        String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill04.xlsx";
        // 选择填充后的文件
        String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill04_end.xlsx";
        // 1.创建write
        ExcelWriter excelWriter = EasyExcel.write(filledFileName)
                .withTemplate(templateFileName)
                .build();
        // 2.创建sheet
        WriteSheet writeSheet = EasyExcel.writerSheet()
                .sheetNo(0)
                .build();
        // 3.构建数据
        List<Fill04> data = new ArrayList<>();
        data.add(Fill04.builder().name("张三").age(20).build());
        data.add(Fill04.builder().name("李四").age(21).build());
        // 填充配置,水平填充
        FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
        // 4.填充数据
        excelWriter.fill(data, fillConfig, writeSheet);
        // 5.关闭流
        excelWriter.finish();
    }
4.结果
相关推荐
曲邹萌9 分钟前
若以floeable流运行(前后端分离)
java
黑听人15 分钟前
【力扣 简单 C】141. 环形链表
c语言·开发语言·数据结构·算法·leetcode
qq_3340602125 分钟前
springmvc
java·spring·mvc
小陈phd31 分钟前
langchain从入门到精通(七)——利用回调功能调试链应用 - 让过程更透明
android·java·langchain
风象南39 分钟前
SpringBoot的4种Bean注入冲突解决方案
java·spring boot·后端
Blossom.1181 小时前
基于深度学习的智能图像分类系统:从零开始构建
开发语言·人工智能·python·深度学习·神经网络·机器学习·分类
缘友一世1 小时前
java设计模式[2]之创建型模式
java·开发语言·设计模式
晴空月明1 小时前
JIT 编译优化原理深度解析
java
hmb↑1 小时前
mvnd-快速打包maven项目
java·maven
迢迢星万里灬2 小时前
Java求职者面试题解析:Spring、Spring Boot、MyBatis框架与源码原理
java·spring boot·spring·mybatis·面试题