EPPlus 導出 Excel 感覺很不錯~~~
前言
導出成爲很多系統的必備功能,之前分享過導出 PDF 的功能,這裏來分享一下 Excel 的導出;
提到 Excel 導出,NPOI 肯定是很多小夥伴的首選,在以往的項目中也用其完成了很多導出需求;對於 NPOI,個人感覺使用還是相對比較複雜,填充數據,單元格格式或樣式,公式計算等,所以就想着換個庫試試;和同事簡單的溝通,EPPlus 和 Magicodes.IE 感覺都不錯,但從 Nuget 包的下載量來看,EPPlus 明顯更勝一籌,而且在當時的業務需求中 EPPlus 更加合適,所以接下來的分享主要針對 EPPlus。
注:EPPlus 從版本 5 開始,如果使用就要求需要商業許可啦,但從業務功能來看,5 之前的版本對於絕大多數業務場景夠用啦,別排斥,看看之前的版本下載量:
不扯那麼多啦,如果小夥伴瞭解更多關於 EPPlus 信息,github 地址爲:https://github.com/JanKallman/EPPlus/wiki。
接下來以平時常用功能爲主,和小夥伴分享一下使用。
正文
這裏新建一個 API 項目,針對每個功能單獨一個接口進行演示,引入的 EPPlus 版本爲 4.5.3.3。
1. 數據填充;
EPPlus 數據填充很簡單,不需要創建行、列,直接定位到單元格賦值即可。兩種定位單元格方式,如下:
-
通過單元格標識來定位
通過單元格標識進行定位,如上圖,圖中 Excel 的列標識爲字母,行標識爲數字,所以第一個單元格的定位可以對應爲 A1,第二個單元格爲 B1,以此類推。
代碼實現:
運行效果,同樣在瀏覽器中輸入對應的接口地址,導出 Excel:
2. 公式自動計算;
在以往導出的操作中,關於計算和彙總的數據很多都是在程序中先算好,然後再填充到單元格中,其實使用 Excel 公式超級方便;
代碼實現:
運行效果:
3. 樣式設置;
-
單個單元格指定樣式
代碼實現:
效果如下:
雖然效果也能實現,但每一個單元格都指定一遍,太麻煩了;下面的範圍設置就比較給力;
-
範圍指定樣式
代碼實現:
運行效果:
-
設置公共樣式,如果所有數據都需要統一的對齊樣式,所有單元格都需要邊框,可以統一設置;
公共樣式直接針對 worksheet 中的所有單元格設置即可;
代碼實現:
運行效果:
4. 合併單元格;
導出數據時,合併單元格是常有的事,我平常用將其分爲列合併和行合併兩種:
-
列合併
在我日常開發中,列合併通常在表頭用的比較多,所以算是比較固定的格式,直接指定合併的範圍即可;
代碼實現:
調用:
運行效果:
當然也可以根據需求,動態設置行進行合併;
-
行合併
行合併主要是針對數據,當連續單元格值相等的情況,通常會要求進行行合併;如上圖中前兩行的第一個單元格數據都爲 111,需將其合併。
代碼實現:
調用:
運行效果:
5. 自適應列寬和自適應內容
當單元格內容比較多時,通常會用到以下兩種方式,如圖:
-
自適應列寬:將字體縮小填充到單元格,單元格列寬不變;
-
自適應內容:單元格根據內容填充,內容多寬就顯示多寬;
代碼實現如下:
運行效果如下:
6. 大數據導出
有些導出需求,需要導出大量的數據,如果通過上述內存的方式導出,可能會因爲數據量大導致數據處理超時或內存泄露導致導出異常,通常這種需求,會採用異步的方式導出數據;大概步驟如下:
-
用戶點擊導出操作,後臺生成一條導出記錄,即導出任務,包括導出時選擇的條件、導出狀態等信息;
-
通過消息隊列或者是後臺任務的形式,獲取到導出任務,得到導出條件,通過後臺任務進行導出操作;
-
保存對應文件,將導出後臺任務狀態改爲已完成;
-
用戶就可以下載生成的文件;
保存文件的代碼實現:
將生成的文件和任務、站點關聯起來就可以根據任務下載啦;這裏就不演示了,和上傳圖片一樣道理。
演示的代碼地址:https://github.com/zyq025/DotNetCoreStudyDemo/tree/main/ExportExcelDemo
總結
關於使用 EPPlus 導出 Excel 的常用功能演示就分享到這了;當然也可以進行導入的操作,只是讀取數據而已,這個就留給小夥伴自己實操練習啦。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/iSrSsxDOkePebhgMdP-YpA