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的常用功能演示就分享到這了;當然也可以進行導入的操作,只是讀取數據而已,這個就留給小伙伴自己實操練習啦。
總結
以上是生活随笔為你收集整理的EPPlus导出Excel感觉很不错~~~的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聊一聊Jmeter的参数化
- 下一篇: 快速弄懂陌生领域是一项“赚钱”的能力