一個簡單高效低內(nèi)存的.NET操作Excel開源框架 - MiniExcel
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
作者:大姚 導(dǎo)讀 MiniExcel簡單、高效避免OOM的.NET處理Excel查、寫、填充數(shù)據(jù)工具。目前主流框架大多需要將數(shù)據(jù)全載入到內(nèi)存方便操作,但這會導(dǎo)致內(nèi)存消耗問題,MiniExcel 嘗試以 Stream 角度寫底層算法邏輯,能讓原本1000多MB占用降低到幾MB,避免內(nèi)存不夠情況。 前言日常工作中經(jīng)常與數(shù)據(jù)打交道的同學(xué)肯定會難以避免對Excel的一些數(shù)據(jù)操作如導(dǎo)入、導(dǎo)出等,但是當(dāng)對一些大數(shù)據(jù)量操作Excel時經(jīng)常會遇到一個常見的問題內(nèi)存溢出。今天給大家推薦一個簡單、高效、低內(nèi)存避免OOM(內(nèi)存溢出)的.NET操作Excel開源框架:MiniExcel。 官方介紹MiniExcel簡單、高效避免OOM的.NET處理Excel查、寫、填充數(shù)據(jù)工具。目前主流框架大多需要將數(shù)據(jù)全載入到內(nèi)存方便操作,但這會導(dǎo)致內(nèi)存消耗問題,MiniExcel 嘗試以 Stream 角度寫底層算法邏輯,能讓原本1000多MB占用降低到幾MB,避免內(nèi)存不夠情況。 圖片 項目特點
主流Excel操作框架性能對比導(dǎo)入、查詢 Excel 比較圖片 導(dǎo)出、創(chuàng)建 Excel 比較圖片 快速開始
Query 查詢 Excel 返回強型別 IEnumerable 數(shù)據(jù)public class UserAccount { public Guid ID { get; set; } public string Name { get; set; } public DateTime BoD { get; set; } public int Age { get; set; } public bool VIP { get; set; } public decimal Points { get; set; } } var rows = MiniExcel.Query<UserAccount>(path);// orusing (var stream = File.OpenRead(path)) var rows = stream.Query<UserAccount>(); 圖片 Query 查詢 Excel 返回Dynamic IEnumerable 數(shù)據(jù)var rows = MiniExcel.Query(path).ToList();// or using (var stream = File.OpenRead(path)){ var rows = stream.Query().ToList(); Assert.Equal("MiniExcel", rows[0].A); Assert.Equal(1, rows[0].B); Assert.Equal("Github", rows[1].A); Assert.Equal(2, rows[1].B);} 支持集合<匿名類別>或是<強型別>var path = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.xlsx");MiniExcel.SaveAs(path, new[] { new { Column1 = "MiniExcel", Column2 = 1 }, new { Column1 = "Github", Column2 = 2} }); IEnumerable<IDictionary<string, object>>var values = new List<Dictionary<string, object>>(){ new Dictionary<string,object>{{ "Column1", "MiniExcel" }, { "Column2", 1 } }, new Dictionary<string,object>{{ "Column1", "Github" }, { "Column2", 2 } } };MiniExcel.SaveAs(path, values); 圖片 IDataReader
MiniExcel.SaveAs(path, reader); 圖片 推薦 DataReader 多表格導(dǎo)出方式(建議使用 Dapper executeReader ) using (var cnn = Connection){ cnn.Open(); var sheets = new Dictionary<string,object>(); sheets.Add("sheet1", cnn.executeReader("select 1 id")); sheets.Add("sheet2", cnn.executeReader("select 2 id")); MiniExcel.SaveAs("Demo.xlsx", sheets);} 項目源碼地址更多項目實用功能和特性歡迎前往項目開源地址查看👀,別忘了給項目一個Star支持💖。 https://gitee.com/dotnetchina/MiniExcel 優(yōu)秀項目和框架精選該項目已收錄到C#/.NET/.NET Core優(yōu)秀項目和框架精選中,關(guān)注優(yōu)秀項目和框架精選能讓你及時了解C#、.NET和.NET Core領(lǐng)域的最新動態(tài)和最佳實踐,提高開發(fā)工作效率和質(zhì)量??右淹?,歡迎大家踴躍提交PR推薦或自薦( https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md 該文章在 2023/10/26 16:18:48 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |