1. 程式人生 > 其它 >C#不要再使用Npoi啦,使用MiniExcel操作Excel檔案更快更高效!

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站【黑哥聊程式設計】