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我在最近的專案中使用到一些高階的內容,我會分篇將我的使用及心得分享出來,一起借鑑學習。