前言
日常工作中经常与数据打交道的同学肯定会难以避免对Excel的一些数据操作如导入、导出等,但是当对一些大数据量操作Excel时经常会遇到一个常见的问题内存溢出。今天给大家推荐一个简单、高效、低内存避免OOM(内存溢出)的.NET操作Excel开源框架:MiniExcel。
官方介绍
MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。
项目特点
- 低内存耗用,避免OOM、频繁 Full GC 情况。
- 支持即时操作每行数据。
- 兼具搭配 LINQ 延迟查询特性,能办到低消耗、快速分页等复杂查询。
- 轻量,不需要安装 Microsoft Office、COM+,DLL小于150KB。
- 简便操作的 API 风格。
主流Excel操作框架性能对比
导入、查询 Excel 比较
导出、创建 Excel 比较
快速开始
注意:下面只展示部分代码示例,详情框架功能代码请前往源码地址查看:https://gitee.com/dotnetchina/MiniExcel
- 导入、读取 Excel
- 导出 、创建 Excel
- 模板填充、创建 Excel
- Excel Column Name/Index/Ignore Attribute
- 例子
Que服务器托管网ry 查询 Excel 返回强型别 IEnumerable 数据
publicclassUserAccount
{
publicGuidID{get;set;}
publicstringName{get;set;}
publicDateTimeBoD{get;set;}
publicintAge{get;set;}
publicboolVIP{get;set;}
publicdecimalPoints{get;set;}
}
varrows=MiniExcel.Query(path);
//or
using(varstream=File.OpenRead(path))
varrows=stream.Query();
Query 查询 Excel 返回Dynamic IEnumerable 数据
varrows=MiniExcel.Query(path).ToList();
//or
using(varstream=File.OpenRead(path))
{
varrows=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);
}
支持集合或是
varpath=Path.Combine(Path.GetTempPath(),$"{Guid.NewGuid()}.xlsx");
MiniExcel.SaveAs(path,new[]{
new{Column1="MiniExcel",Column2=1},
new{Column1="Github",Column2=2}
});
IEnumerable>
varvalues=newList>()
{
newDictionary{{"Column1","MiniExcel"},{"Column2",1}},
newDictionary{{"Column1","Github"},{"Column2",2}}
};
MiniExcel.SaveAs(path,values);
IDataReader
推荐使用,可以避免载入全部数据到内存.
MiniExcel.SaveAs(path,reader);
推荐 DataReader 多表格导出方式(建议使用 Dapper ExecuteReader )
using(varcnn=Connection)
{
cnn.Open();
varsheets=newDictionary();
sheets.Add("sheet1",cnn.ExecuteReader("select1id"));
sheets.Add("sheet2",cnn.ExecuteReader("select2id"));
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
加入DotNetGuide技术交流群
1、提供服务器托管网.NET开发者分享自己优质文章的群组和获取更多全面的C#/.NET/.NET Core学习资料、视频、文章、书籍,社区组织,工具和常见面试题资源,帮助大家更好地了解和使用 .NET技术。
2、在这个群里,开发者们可以分享自己的项目经验、遇到的问题以及解决方案,倾听他人的意见和建议,共同成长与进步。
3、可以结识更多志同道合的开发者,甚至可能与其他开发者合作完成有趣的项目。通过这个群组,我们希望能够搭建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值。
欢迎加入DotNetGuide技术交流群
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net