Java ECC是一款轻量且高效的Excel读写工具

1、来源:https://gitee.com/wangguanquan/eec

2、pom

<dependency>
            <groupId>org.ttzero</groupId>
            <artifactId>eec</artifactId>
            <version>0.5.12</version>
        </dependency>

3、demo

List<User> list = new ArrayList<>();

        User user1 = new User();
        user1.setId(111L);
        user1.setName("aaa1");
        list.add(user1);

        User user2 = new User();
        user2.setId(222L);
        user2.setName("aaa2");
        list.add(user2);

        User user3 = new User();
        user3.setId(111L);
        user3.setName("aaa3");
        list.add(user3);

        User user4 = new User();
        user4.setId(444L);
        user4.setName("aaa4");
        list.add(user4);

        Workbook wb = new Workbook("abc");
        wb.addSheet(new ListSheet<>("abc", list));
        wb.writeTo(Paths.get("e:/excel"));

4、结果

 

附1:读入到数组或列表:

try (ExcelReader reader = ExcelReader.read(Paths.get("./User.xlsx"))) {
    // 读取第1个Sheet页
    List<User> users = reader.sheet(0)
        // 指定第6行为表头,前5行为概要信息
        .header(6)
        // 读取数据行
        .rows()
        // 将每行数据转换为User象
        .map(row -> row.to(User.class))
        // 收集为List或数组进行后续处理
        .collect(Collectors.toList());
} catch (IOException e) {
    e.printStackTrace();
}

附2:支持多行表头(EEC使用多个ExcelColumn注解来实现多级表头,名称一样的行或列将自动合并)

 public static class RepeatableEntry {
    @ExcelColumn("运单号")
    private String orderNo;
    @ExcelColumn("收件地址")
    @ExcelColumn("省")
    private String rProvince;
    @ExcelColumn("收件地址")
    @ExcelColumn("市")
    private String rCity;
    @ExcelColumn("收件地址")
    @ExcelColumn("详细地址")
    private String rDetail;
    @ExcelColumn("收件人")
    private String recipient;
    @ExcelColumn("寄件地址")
    @ExcelColumn("省")
    private String sProvince;
    @ExcelColumn("寄件地址")
    @ExcelColumn("市")
    private String sCity;
    @ExcelColumn("寄件地址")
    @ExcelColumn("详细地址")
    private String sDetail;
    @ExcelColumn("寄件人")
    private String sender;
}

 附3:多行表头读取(多级表头可以使用header方法来指定表头所在的多个行号)

reader.sheet(0)
    .header(1, 2) // <- 指定第1、2行均为表头
    .map(Row::toMap) // <- Row 转 Map
    .forEach(System.out::println)

 

posted @ 2024-02-18 11:51  都是城市惹的祸  阅读(19)  评论(0)    收藏  举报