# easyexcel_demo **Repository Path**: linguochao/easyexcel_demo ## Basic Information - **Project Name**: easyexcel_demo - **Description**: 阿里巴巴开源的 Easyexcel demox项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-11 - **Last Updated**: 2021-01-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 一. 技术选型 能够实现「导入/导出 Excel」的第三方常用类库有 - Apache poi - Java Excel(JXL) - 阿里巴巴开源的 Easyexcel ## 二. 性能对比 1. poi 和 jxl 对内存的消耗很大,在处理大批量的数据时,容易造成内存溢出。 2. 如处理一个 3M 的 Excel,poi 和 jxl 可能需要上百兆的内存,但 easyexcel 可能只需要几百或几千 KB(内存消耗对比有些夸张)。 3. 在性能这一块,Excel 完全是吊打 poi 和 jxl。 ## 三. 学习复杂度对比 1. poi理解起来不难,就是操作的时候太特么的难了。因为 poi 需要自己处理数据,还有复杂的表格样式,就光是处理数据这一款就很头疼了 2. easyexcel。它能自己处理数据,表格格式也简单,即使是小白也很容易上手。在学习复杂的这块也吊打 poi,而 jxl 我没了解,但多半也是被吊打。 ## 四. ExcelListener 使用 EasyExcel,我们需要继承 `AnalysisEventListener` ```java public class ExcelListener extends AnalysisEventListener { //可以通过实例获取该值 private List datas = new ArrayList(); public void invoke(Object o, AnalysisContext analysisContext) { datas.add(o);//数据存储到list,供批量处理,或后续自己业务逻辑处理。 doSomething(o);//根据自己业务做处理 } private void doSomething(Object object) { //1、入库调用接口 } public List getDatas() { return datas; } public void setDatas(List datas) { this.datas = datas; } public void doAfterAllAnalysed(AnalysisContext analysisContext) { // datas.clear();//解析结束销毁不用的资源 } } ``` 其中, `invoke()` 和 `doAfterAllAnalysed()` 是必须实现的方法。 在 `invoke()` 中,我们将数据封装到 `list` 中,再在控制器中,通过 `getter()` 方法获取数据,这样我们就可以获取到 `easyexcel` 帮我们解析好的数据,再将数据进行类型转化,这样,我们就可以对数据进行写入操作。 ## 五. TableHeaderExcelProperty 这是一个实体类。我们导出 Excel 时,有时需要表头,如果需要表头,我们就可以在相应的实体类中加入 `@ExcelProperty(value = "id", index = 0)` 注解。其中 value 代表在导出 Excel 时,该字段对应的表头名称;index 代表该字段对应的表头位置。 ```java @Data public class TableHeaderExcelProperty { @ExcelProperty(value = "姓名", index = 0) private String name; @ExcelProperty(value = "年龄",index = 1) private int age; @ExcelProperty(value = "学校",index = 2) private String school; } ```