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.结果
相关推荐
硕风和炜3 分钟前
【LeetCode: 112. 路径总和 + 二叉树 + 递归】
java·算法·leetcode·面试·二叉树·递归
王尼莫啊24 分钟前
【QT】找不到qwt_plot.h
开发语言·数据库·qt
Ma_si31 分钟前
在 Python 中合并多个 Word 文档
开发语言·python·word
带多刺的玫瑰37 分钟前
Leecode刷题C语言之设计一个ATM机器
c语言·开发语言
“αβ”44 分钟前
c语言的文件操作与文件缓冲区
c语言·开发语言
Xwzzz_1 小时前
基于Redisson实现重入锁
java·redis·lua
吴冰_hogan1 小时前
并发编程之CAS与Atomic原子操作详解
java·开发语言·数据库
常家壮1 小时前
便捷的斤克转换小助手(Python 版)
开发语言·python·物理···单位转换
风月歌1 小时前
基于Web的足球青训俱乐部管理后台系统的设计与开发源码(springboot+mysql+vue)
java·前端·spring boot·后端·mysql·mybatis·源码
飞yu流星1 小时前
C++ 文件操作
开发语言·c++·cocoa