Java工具包-poi和easyExcel简述

353 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

1 前言

Excel和读写和文件的读写没有本质的区别,都是属于IO操作,我们使用原生的IO就能解决Excel的导入和导出,当然操作起来比较麻烦,性能也不高,这次我们就学习poi和easyExcel(它们都属于第三方工具)的方式去基于Java和Mysql数据库导入导出我们的Excel的数据

poi:Apache

easyExcel:阿里巴巴开源的工具

2 使用常用场景

1 将大量的数据导入为excel表格

2 将excel表中的信息录入到数据库(比如习题上传)(也叫批量插入),大大减轻我们人工乃至网站的录入量

开发中经常会涉及到对Excel的处理,如导入Excel,导出Excel到数据库

目前操作excel比较流行的就是Apache POI和阿里巴巴的easyExcel

3 Apache POI

官网: poi.apache.org

Apache给我们提供的POI不仅可以操作excel格式,对于word,ppt,visio都是提供支持的,而且语法大概类似

HSSF是处理普通的excel的

XSSF是处理OOXML格式的excel的

值得注意点是,虽然HSSF和XSSF都可以处理excel,但是还是有差距

比如excel主要有两个版本 03版和07版,其中03版的行数最多只能存65535行,07版的是没有限制的

如果想要操作Word,那么使用HWPF

如果想要操作PPT,那么使用HSLF

如果想要操作Visio,那么使用HDGF

原生的POI使用起来比较麻烦,而且量大的时候会报OOM异常(out of memory的简称,称之为内存溢出),但是现在很多市面上的工具底层也是会使用封装POI的

4 easyExcel(阿里巴巴开源工具)

官网:github.com/alibaba/eas…

官方文档:www.yuque.com/easyexcel/d…

easyExcel是阿里巴巴开源的一个对于excel处理工具(框架)以使用简单,节省内存著称

easyExcel能大大减少内存占用的主要原因是在解析excel中没有将文件数据一次性全部加载到内存中,而是从磁盘上一行一行的读取,逐个解析

由于POI比较原生比较复杂,我们后研发出新的(工具)框架easyExcel,它是阿里巴巴退出的对于POI的后续产品,并且对POI做了升级和优化,不会因为excel数据量过大引起oom异常(内存溢出),使我们用起来更加的方便(读写Excel只需要一行代码!)

5 poi和easyExcel的不同

主要在于内存和操作过程

比如我们现在excel表有100W数据

1 poi是先把数据加载到内存,如果我们内存比较小,Java是会直接报OOM内存溢出异常,这时候就会有问题,但是easyExcel它就比较简单只能,就算读写100W行数据,会一行一行的读写,不会直接全部解析

2poi会一次性全部读取和返回execl表格的数据,但是easyExcel不会这样,它没有将文件数据一次性全部加载到内存中,而是从磁盘上一行一行的读取,逐个解析

poi和easyExcel的本质上就是时间和空间的转换,根据我们的需求自行选择即可