日常工作中经常与数据打交道的内存同学肯定会难以避免对Excel的一些数据操作如导入、导出等,操作但是源框当对一些大数据量操作Excel时经常会遇到一个常见的问题内存溢出。今天给大家推荐一个简单、个简高效、单高的低内存避免OOM(内存溢出)的效低.NET操作Excel开源框架:MiniExcel。
MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。
图片
图片
图片
注意:下面只展示部分代码示例,详情框架功能请前往源码地址查看:https://gitee.com/dotnetchina/MiniExcel
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>();
图片
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}});
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);
图片
推荐使用,可以避免载入全部数据到内存.
MiniExcel.SaveAs(path, reader);
图片
推荐 DataReader 多表格导出方式(建议使用 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
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞
)。
https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
责任编辑:武晓燕 来源: 追逐时光者 Excel开源框架(责任编辑:休闲)
白鹤滩水电站2022年累计生产清洁电能100亿千瓦时 可节约标准煤约306万吨
RCEP为企业拓展国际市场“添翼” 进一步促进大宗消费、重点消费
同济科技(600846.SH):终止2017年度配股公开发行证券方案 维护投资者利益