C#不要再使用Npoi啦,使用MiniExcel操作Excel檔案更快更高效!
1.簡介
MiniExcel簡單、高效避免OOM的.NET處理Excel查、寫、填充資料工具。
目前主流框架如Npoi 需要將資料全載入到記憶體方便操作,但這會導致記憶體消耗問題。
MiniExcel 嘗試以 Stream 角度寫底層演算法邏輯,能讓原本1000多MB佔用降低到幾MB,避免記憶體不夠情況。
2.特點
低記憶體耗用,避免OOM(out of memoery)、頻繁 Full GC 情況
支援即時操作每行資料
兼具搭配 LINQ 延遲查詢特性,能辦到低消耗、快速分頁等複雜查詢
輕量,不需要安裝 Microsoft Office、COM+,DLL小於150KB
簡便操作的 API 風格。
3.特點
低記憶體耗用,避免OOM(out of memoery)、頻繁 Full GC 情況
支援即時操作每行資料,
兼具搭配 LINQ 延遲查詢特性,能辦到低消耗、快速分頁等複雜查詢
輕量,不需要安裝 Microsoft Office、COM+,DLL小於150KB
簡便操作的 API 風格.
4.使用
安裝
使用Nuget搜尋Miniexcel安裝
準備一個Excel測試檔案
裡面有三列,Id,Name,Title
再寫入20行資料
我們在使用Query 查詢 Excel 返回強型別 IEnumerable 資料
既然是強型別 那我們我們就要寫一個Model類
public class Test { public int Id { get; set; } public string Name { get; set; } public string Title { get; set; } }
為了大家看得方便明瞭,我這裡使用winform進行測試 miniexcel 支援.net framework 和.net core 。
查詢就一行程式碼,簡單明瞭,比Npoi是不是看起來就好多了
var rows = MiniExcel.Query<Test>(path).ToList(); uiDataGridView1.DataSource = rows;
寫入並另存為檔案也很簡單
MiniExcel.SaveAs(@"D:\測試文件全部匯出.xlsx", rows);
重寫標題另存就需要寫一個重寫標題的方法
private IEnumerable<Dictionary<string, object>> GetOrders(List<Test> test) { foreach (var item in test) { var newCompanyPrepareds = new Dictionary<string, object>(); newCompanyPrepareds.Add("Id", item.Id); newCompanyPrepareds.Add("姓名", item.Name); newCompanyPrepareds.Add("職位", item.Title); yield return newCompanyPrepareds; } }
最後再說一下我為什麼推薦Minexcel的原因:
這裡我開個小小的車,
npoi就相當於半老徐娘, minixecel就相當於18歲的姑娘
且npoi有的我們的miniexcel都有,如果有這兩個姑娘讓你選擇,我現在大家都會選擇miniexcel吧
最後我希望所有neter關注前沿技術,不要故步自封。
最後大家如果喜歡我的文章,還麻煩給個關注, 希望net生態圈越來越好!
個人公眾號【黑哥聊dotNet】
b站【黑哥聊程式設計】