关于阿里easyExcel和poi的差异

一、导入依赖
poi
<!--xls(03)-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<!--xlsx(07)-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
easyexcel
<!--easyexcel-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.6</version>
</dependency>

相比于POI 阿里easyExcel 只需要导入一个依赖包 底层已经集成poi

当然目前已处理依赖冲突问题,详情请看最后

二、数据处理能力
poi
结构支持Excel版本读写行数读写速度格式内存占用
HSSFexcel 2003 版本<=65536行
XSSFexcel 2007 版本>=65536行Microsoft Excel OOXML
SXSSFexcel 2007 版本>=65536行介于HSSF 和XSSFMicrosoft Excel OOXML比较高
阿里easyExcel
easyExcel内存占用读写速度读写行数
2.0.0以上版本比较低(重写POI对07Excel的解析)非常快>65536(无限制,单sheet最大支持1048576行)

在这里插入图片描述

三、使用上手难易度
工具上手难易程度
POI比较难(需要对源码有所研究 需要写workbook),使用完必须手动关闭流
easyExcel简单只需要提供数据和模板,不需要关闭流
四、维护难易度
项目star数相关文档
poi1200GitHub英文
easyExcel19700语雀、GitHub中文文档(https://www.yuque.com/easyexcel/doc/easyexcel)
POI 写
  String dataString = JSON.toJSONStringWithDateFormat(list, DATE_FORMAT, WriteDateUseDateFormat);
        List<Map<String, Object>> excelList = JSON.parseObject(dataString, new TypeReference<List<Map<String, Object>>>() {
        });
        ArrayList<Pair<String, String>> head = new ArrayList<Pair<String, String>>() {
            {
                add(Pair.of("title", "文章标题"));
                add(Pair.of("contentTypeName", "内容类型"));
                add(Pair.of("authorName", "创建人"));
                add(Pair.of("createTime", "发布时间"));
            }
        };
        HSSFWorkbook book = ExcelUtils.getExcelBook(excelList, head, null);
        String fileName = String.format("文章-%s.xls", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
        return ExcelAssembler.convert(fileName, book);

//获取文件流
    FileInputStream inputStream = new FileInputStream(PATH + "godfrey日常统计表03.xls");

    //1.创建工作簿,使用excel能操作的这边都看看操作
    Workbook workbook = new HSSFWorkbook(inputStream);
    //2.得到表
    Sheet sheet = workbook.getSheetAt(0);
    //3.得到行
    Row row = sheet.getRow(0);
    //4.得到列
    Cell cell = row.getCell(0);

    //getStringCellValue获取字符串类型
    System.out.println(cell.getStringCellValue());
    inputStream.close();

easyexcel
//准备实体表头
@Data
public class DemoData {
    /**
    * value:表示表头名称
    * index:表示位置
    **/
    @ExcelProperty(value= "字符串标题",index = 0)
    private String string;
    @ExcelProperty("日期标题",index = 1)
    private Date date;
    @ExcelProperty("数字标题",index = 2)
    private Double doubleData;
    /**
     * 忽略这个字段
     */
    @ExcelIgnore
    private String ignore;
}

 //准备数据
 private List<DemoData> data() {
        List<DemoData> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            DemoData data = new DemoData();
            data.setString("字符串" + i);
            data.setDate(new Date());
            data.setDoubleData(0.56);
            list.add(data);
        }
        return list;
    }

    /**
     * 最简单的写
     * 1. 创建excel对应的实体对象 参照{@link DemoData}
     * 2. 直接写即可
     */
    @Test
    public void simpleWrite() {
        // 写法1
        String fileName = PATH + "EasyTest.xlsx";
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());

    }

  excel读取
  /**
     * 文件上传   
     * <p>1. 创建excel对应的实体对象 参照{@link UploadData}
     * <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link UploadDataListener}
     * <p>3. 直接读即可
     */
    @PostMapping("upload")
    @ResponseBody
    public String upload(MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead();
        return "success";
    }

阿里easyExcel如何支持动态表头导出?
在这里插入图片描述

五、阿里easyExcel给我们带来的优势

poi写法

表头写法
在这里插入图片描述
easyExcel

表头使用注解,与实体进行绑定,实体即模板实体即表头 要导出什么一目了然
在这里插入图片描述
      阿里为我们提供了更加灵活,方便高效的表头表达方式,这种方式更加直观,看起来也更加的与代码无关性。
在这里插入图片描述
      导出的报表样式
在这里插入图片描述

六、poi和easyExcel兼容问题

       我们在项目优化中经常会碰到这样的问题,老项目用的是poi但是新项目我想用阿里easyExcel,但是老项目的东西改不动怎么办。——好办 阿里easyExcel可以兼容poi jar
例如

poieasyExcel
3.1.72.1.6-2.2.6(亲测可行)

这样我们就解决了,poi和阿里easyExcel同事存在兼容问题

七、总结

      从上面可以看出来,poi能做的easyExcel也能做,而且做的更加优秀(防止内存溢出、性能),更加的方便(使用)。
      所以阿里easyExcel如此的优秀,也怪不得辣么多人使用。

  • 16
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值