沐鸣娱乐


        一个简单高效低内存的.NET操作Excel开源框架 – MiniExcel(netcore开源框架)

        一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel(netcore开源框架)一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel(netcore开源框架)

        前言

        日常工作中经常与数据打交道的同学肯定会难以避免对Excel的一些数据操作如导入、导出等,但是当对一些大数据量操作Excel时经常会遇到一个常见的问题内存溢出。今天给大家推荐一个简单、高效、低内存避免OOM(内存溢出)的.NET操作Excel开源框架:MiniExcel 。

        官方介绍

        MiniExcel简单、高效避免OOM的.NET处理Excel查、写 、填充数据工具。目前主流框架大多需要将数据全载入到内存方便操作 ,但这会导致内存消耗问题 ,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。

        一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel(netcore开源框架)

        项目特点

        • 低内存耗用,避免OOM、频繁 Full GC 情况。

        • 支持即时操作每行数据。

        • 兼具搭配 LINQ 延迟查询特性,能办到低消耗、快速分页等复杂查询。

        • 轻量,不需要安装 Microsoft Office、COM ,DLL小于150KB 。

        • 简便操作的 API 风格。

        主流Excel操作框架性能对比

        导入、查询 Excel 比较

        一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel(netcore开源框架)

        导出、创建 Excel 比较

        一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel(netcore开源框架)

        快速开始

        注意 :下面只展示部分代码示例,详情框架功能请前往源码地址查看:https://gitee.com/dotnetchina/MiniExcel

        Query 查询 Excel 返回强型别 IEnumerable 数据

        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);

        // or

        using (var stream = File.OpenRead(path))
        var rows = stream.Query<UserAccount>;

        一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel(netcore开源框架)

        Query 查询 Excel 返回Dynamic IEnumerable 数据


        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);

        一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel(netcore开源框架)

        IDataReader

        推荐使用,可以避免载入全部数据到内存.

        MiniExcel.SaveAs(path, reader);

        一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel(netcore开源框架)

        推荐 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

        相关新闻

        联系我们
        联系我们
        分享本页
        返回顶部

          XML地图