EASYEXCEL(一)

1.读取excel

读监听器

复制代码
@Slf4j
public class StudentReadListener extends AnalysisEventListener<Student> {
    // 每读一样,会调用该invoke方法一次
    @Override
    public void invoke(Student data, AnalysisContext context) {
        System.out.println("data = " + data);
         log.info(data + "保存成功");
    }

    // 全部读完之后,会调用该方法
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // TODO......
    }
}

映射实体类

复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
@ColumnWidth(20)
@ToString
public class Student {

    /**
     * id
     */
    @ExcelProperty(value = "编号",index = 0)
    //@ExcelIgnore
    private String id;
    /**
     * 学生姓名
     */
    @ExcelProperty(value = "学生姓名", index = 1)
    //@ColumnWidth(30)
    private String name;
    /**
     * 学生性别
     */
    @ExcelProperty(value = "学生性别", index = 2)
    private String gender;

    /**
     * 学生出生日期
     */
    @ExcelProperty(value = "学生出生日期", index = 3)
    //@ColumnWidth(20)
    private Date birthday;

读取

复制代码
public class StudentReadDemo {
    public static void main(String[] args) throws FileNotFoundException {
        // 读取文件,读取完之后会自动关闭
        /*
            pathName        文件路径;"C:\\Users\\wjg\\Desktop\\学员信息.xlsx"
            head            每行数据对应的实体;Student.class
            readListener    读监听器,每读一样就会调用一次该监听器的invoke方法

            sheet方法参数: 工作表的顺序号(从0开始)或者工作表的名字,不传默认为0
        */
        // 封装工作簿对象
        ExcelReaderBuilder workBook = EasyExcel.read
                ("C:\\Users\\wjg\\Desktop\\学员信息.xlsx", Student.class, new StudentReadListener());

        // 封装工作表
        ExcelReaderSheetBuilder sheet1 = workBook.sheet();
        // 读取
        sheet1.doRead();
    }

2.写入excel

复制代码
public class StudentWriteDemo {
    public static void main(String[] args) {

        List<Student> students = initData();
        /*
            String pathName 写入文件的路径
            Class head      写入文件的对象类型
            默认写入到07的xlsx中,如果想要写入xls,可以指定类型(待验证)
         */
        ExcelWriterBuilder workBook = EasyExcel.write("C:\\Users\\wjg\\Desktop\\学员信息.xlsx", Student.class);

        // sheet方法参数: 工作表的顺序号(从0开始)或者工作表的名字
        workBook.sheet().doWrite(students);
    }

    private static List<Student> initData() {
        ArrayList<Student> students = new ArrayList<Student>();
        Student data = new Student();
        for (int i = 0; i < 10; i++) {
            data.setName("学号0" + i);
            data.setBirthday(new Date());
            data.setGender("男");

            data.setId(String.valueOf(i));
            students.add(data);
        }
        return students;
    }
}
相关推荐
大怪v5 小时前
AI抢饭?前端佬:我要验牌!
前端·人工智能·程序员
新酱爱学习5 小时前
字节外包一年,我的技术成长之路
前端·程序员·年终总结
皮皮林5515 小时前
拒绝写重复代码,试试这套开源的 SpringBoot 组件,效率翻倍~
java·spring boot
小兵张健6 小时前
开源 playwright-pool 会话池来了
前端·javascript·github
IT_陈寒8 小时前
Python开发者必知的5大性能陷阱:90%的人都踩过的坑!
前端·人工智能·后端
codingWhat9 小时前
介绍一个手势识别库——AlloyFinger
前端·javascript·vue.js
代码老中医9 小时前
2026年CSS彻底疯了:这6个新特性让我删掉了三分之一JS代码
前端
不会敲代码19 小时前
Zustand:轻量级状态管理,从入门到实践
前端·typescript
踩着两条虫9 小时前
VTJ.PRO 双向代码转换原理揭秘
前端·vue.js·人工智能
扉川川9 小时前
OpenClaw 架构解析:一个生产级 AI Agent 是如何设计的
前端·人工智能