EasyExcel 簡介篇
互聯網的精髓就是共享,可以共享技術、共享經驗、共享情感、共享快樂~
很多年前就有這個想法了,從事IT行業時間也不短了,應該把自己工作和業余所學習的東西記錄並分享出來,和有緣人一起學習和交流。
如果您是那個有緣人,請上島一敘!爪哇島隨時歡迎您!
一、簡介
咱們傳統Excel的操作或者數據解析都是利用Apach POI進行操作,有使用過POI經驗的同學應該都了解,POI框架並不完美,有較多的缺陷:
- 操作Excel步驟繁瑣
核心組件:Workbook、Sheet、Row、Cell
讀取數據時對於不同數據類型的數據處理非常麻煩 - 導出動態Excel的操作更是麻煩
- 學習成本較高,對於新手來說很難在短時間上手
- 性能問題比較明細,特別是在海量數據場景下,經常出現內存OOM問題
寫HSSF(6.5w內),最多只能處理 65536 行,否則會拋出異常;
寫XSSF(100w內),寫數據時速度非常慢,非常耗內存,經常發生內存溢出;
寫SXSSF(100w+),過程總會產生臨時文件,需要清理臨時文件;使用高階功能(區域合並、注釋、動態數據)仍然非常耗內存;
阿里巴巴項目組開源出來了一款更容易上手且性能更高的Excel操作框架:EasyExcel,它以使用簡單、節省內存著稱。它可以支持:
- 基礎表格的導入導出
- 圖片數據的導入導出
- 百萬數據的導入導出
讀寫操作核心: 注解 + List + API封裝
官方地址:https://alibaba-easyexcel.github.io/quickstart/write.html
API + 注解: https://alibaba-easyexcel.github.io/quickstart/api.html
二、性能評測【數據量級:2個屬性,80w】
1. 實測結果【數量級:2列數據,80萬】
** POI【3.10-FINAL】:**
EasyExcel【1.1.2-beta4】
2. 數據讀取機制對比
數據讀取
- POI讀取數據時會先將數據全部加載到內存中,然后返回給調用者,當數據量比較大時,容易發生OOM;
- EasyExcel讀取數據時采用SAX模式,逐行解析,將解析結果通過觀察者模式通知處理,數據量較大時也不會發生OOM;
三、為什么選擇EasyExcel
- 性能方面
64M內存1分鍾內讀取75M(46W行25列)
- 功能方面
- 讀Excel
- 指定列的index和列名 ExcelProperty注解【index、value】
- 讀取多個sheet
- 數據格式自定義轉換器(xxxFormat注解、converter屬性)
- 多行head頭
- 通過List集合讀取數據(不用對象讀取)
- 讀取Web瀏覽器數據
- 寫Excel
- 根據參數導出指定列
- 復雜表頭寫入(合並、多級頭、動態表頭)
- 多個sheet寫入
- 數據格式自定義轉換
- 圖片導出
- 根據模板導出
- 自定義行列樣式(尺寸、合並、顏色、排序、下拉、篩選、超鏈接等)
- 使用Table方式導出
- 自定義攔截器
- 通過List集合讀取數據(不用對象讀取)
- Web瀏覽器寫入
- 學習成本
- 阿里巴巴提供官方Demo示例文檔
- API結構易理解,上手快
- 語雀社區提供持續更新維護,當前最新版本更新到2.2.8
四、結束語
如果你的項目中也有Excel的導入導出操作,EasyExcel是一個不錯的選擇。關於EasyExcel我在最近的項目中使用到一些高階的內容,我會分篇將我的使用及心得分享出來,一起借鑒學習。