海量數據Excel報表利器——EasyExcel(開場篇)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM