忿忿的泥巴坨 发表于 2024-12-31 22:12:37

EasyExcel(读取操作和添补操作)

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

https://i-blog.csdnimg.cn/img_convert/d92c48cf0510104c85d01badef148079.png
2.读取第一个sheet中的数据

1.模板

@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.方法

/**
* 读取第一个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.结果

https://i-blog.csdnimg.cn/img_convert/50c266fbe3e08c84aa95b04c8a98aae6.png
3.读取全部sheet中的数据

1.模板

@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.方法

/**
* 读取所有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.结果

https://i-blog.csdnimg.cn/img_convert/395c216fd1e9cd39e554cc950f7c55bf.png
EasyExcel添补

1.简单添补

1.预备 Fill01.xlsx

https://i-blog.csdnimg.cn/img_convert/3299f64e7d85333c9052e88723553b8e.png
2.无模版

3.方法

/**
* 简单填充
*/
@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.结果

https://i-blog.csdnimg.cn/img_convert/cf0727b63e167d7327f29c21ba8cbcf1.png
2.列表添补

1.预备 Fill02.xlsx

https://i-blog.csdnimg.cn/img_convert/10b3ca6fae25e0cc6e9b2931d405cf7f.png
2.模板

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Fill02 {
      private String name;
      private Double number;
    }
3.方法

    /**
   * 列表填充
   */
    @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.结果

https://i-blog.csdnimg.cn/img_convert/aff2d733af0e7fcdccc0514dbfc68d3e.png
3.组合添补

1.预备 Fill03.xlsx

https://i-blog.csdnimg.cn/img_convert/a5ffabd56983be2a74c1827f746361af.png
2.模板

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Fill03 {
      private String name;
      private Integer age;
    }
3.方法

/**
* 组合填充
*/
@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.结果

https://i-blog.csdnimg.cn/img_convert/093708d5bb758caba3d73c6f85a6e30b.png
4.程度添补

1.预备 Fill04.xlsx

https://i-blog.csdnimg.cn/img_convert/5d352520f583efa9e94ef22bf9954ebb.png
2.模板

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Fill04 {
    private String name;
    private Integer age;
}
3.方法

    /**
   * 水平填充
   */
    @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.结果

https://i-blog.csdnimg.cn/img_convert/0e3a43b9b2154180e10334c4732151a4.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: EasyExcel(读取操作和添补操作)