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.结果
相关推荐
二进制person3 分钟前
Java SE--方法的使用
java·开发语言·算法
OneQ66629 分钟前
C++讲解---创建日期类
开发语言·c++·算法
小阳拱白菜1 小时前
java异常学习
java
码农不惑1 小时前
2025.06.27-14.44 C语言开发:Onvif(二)
c语言·开发语言
FrankYoou2 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
麦兜*3 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
Coding小公仔3 小时前
C++ bitset 模板类
开发语言·c++
KK溜了溜了3 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
小赖同学啊3 小时前
物联网数据安全区块链服务
开发语言·python·区块链
天河归来3 小时前
使用idea创建springboot单体项目
java·spring boot·intellij-idea