最近我在 Github 上查找一個能夠快速開發 excel 導入導出工具,偶然發現由阿里開發 easyexcel 開源項目,嘗試使用後感受這款工具挺不錯的,下面分享一下個人 easyexcel 案例使用。git
一、easyexcel 簡介github
通常在項目可能會涉及到 Excel 導入和導出,一般咱們都是使用 Apache POI 或者 jxl。但他們都存在一個嚴重的問題就是很是的耗內存,POI 有一套 SAX 模式的 API 能夠必定程度的解決一些內存溢出的問題,但 POI 依舊存在一些缺陷,好比 07 版 Excel 解壓縮以及解壓後存儲都是在內存中完成的,內存消耗依然很大。而 easyexcel 重寫了 POI 對 07 版 Excel 的解析,可以本來一個 3M 的 Excel 用 POI SAX 依然須要 100M 左右內存下降到 KB 級別,而且再大的 Excel 不會出現內存溢出,03 版依賴 POI 的 SAX 模式。在上層作了模型轉換的封裝,使用起來更加方便。瀏覽器
二、項目結構網絡
2.一、pom.xml工具
2.二、模型插件
@Data 是 Lombok 插件的註解,須要先安裝。@Data 註解在類上,會爲類的全部屬性自動生成 set/get、equals、canEqual、hashCode、toString方法。3d
RowNumExcelListenerexcel
使用 easyexcel,咱們須要繼承 AnalysisEventListener 。必須實現 invoke() 和 doAfterAllAnalysed() 方法。easyexcel 會調用 invoke() 將數據存入 List 中。xml
2.三、讀操做blog
當只讀取一個 Excel 的一個sheet,能夠直接 EasyExcelFactory.readBySax() 方法解析 Excel 文件。
讀取多個 sheet,須要經過讀取全部 sheet,再進行選擇讀取哪些數據,讀取完一個 sheet,須要從新清空列表,否則會致使全部 sheet 數據都存儲在列表中。
2.四、寫操做
根據模型的寫入,經過 ExcelWriter 的 wirter() 方法,ExcelWriter 根據 sheet 預先設置的 模型生成和插入數據。
(推薦)根據模板的寫入,根據一個 Excel 文件爲模板,生成 Excel 文件。
easyexcel 還支持對單元格的樣式的控制,經過 WriteHandler 接口實現。可是 easyexcel 所支持的樣式要比 POI 少,官方也不是不推薦使用 easyexcel 進行實現複雜的 Excel。easyexcel 主要爲了解決 OOM 的問題,實現低消耗讀取解析文件。
如何實現經過瀏覽器下載 Excel 文件,案例中使用的文件輸出流,要實現網絡下載,只須要把對應的輸出流改成獲取 Response 進行輸出便可。
三、小結
通常在項目實現 Excel 導入導出功能,easyexcel 是能夠勝任的,easyexcel 有着這處理海量數據?? Excel 的能力和更高一級的封裝,可讓咱們更快的上手,easyexcel 適用於解析海量數據 Excel 場景,若是須要實現生成複雜的 Excel 文件,最好仍是使用 POI 比較好。
更加詳細的信息能夠查看 github 上的內容,GitHub連接爲 https://github.com/alibaba/easyexcel。
ps:須要完整代碼,關注公衆號:哈爾的數據城堡(data_dev),回覆‘easyexcel’得到~