海量資料Excel報表利器——EasyExcel(開場篇)

島主~it_rabbit發表於2021-07-03

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

  1. 效能方面

64M記憶體1分鐘內讀取75M(46W行25列)

  1. 功能方面
  • 讀Excel
    • 指定列的index和列名 ExcelProperty註解【index、value】
    • 讀取多個sheet
    • 資料格式自定義轉換器(xxxFormat註解、converter屬性)
    • 多行head頭
    • 通過List集合讀取資料(不用物件讀取)
    • 讀取Web瀏覽器資料
  • 寫Excel
    • 根據引數匯出指定列
    • 複雜表頭寫入(合併、多級頭、動態表頭)
    • 多個sheet寫入
    • 資料格式自定義轉換
    • 圖片匯出
    • 根據模板匯出
    • 自定義行列樣式(尺寸、合併、顏色、排序、下拉、篩選、超連結等)
    • 使用Table方式匯出
    • 自定義攔截器
    • 通過List集合讀取資料(不用物件讀取)
    • Web瀏覽器寫入
  1. 學習成本
  • 阿里巴巴提供官方Demo示例文件
  • API結構易理解,上手快
  • 語雀社群提供持續更新維護,當前最新版本更新到2.2.8

四、結束語

如果你的專案中也有Excel的匯入匯出操作,EasyExcel是一個不錯的選擇。關於EasyExcel我在最近的專案中使用到一些高階的內容,我會分篇將我的使用及心得分享出來,一起借鑑學習。

相關文章