LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

推荐一款Excel读写神器之MiniExcel入门详解

admin
2025年6月23日 13:32 本文热度 83

在实际应用中,经常需要用到数据的导入与导出,而在这些导入导出功能中,最常用的就是Excel格式,它能非常方便的实现格式化数据呈现。目前主流框架大多需要将数据全载入到内存方便操作,但如果数据量过大,这可能会导致内存消耗问题,今天介绍的MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。本文以一些简单的小例子,简述MiniExcel的常见用法,仅供学习分享之用,如有不足之处,还请指正。


什么是MiniExcel?


MiniExcel是.Net基金会旗下的项目,是一款简单、高效避免OOM(Out of Memory)的.NET处理Excel查、写、填充数据工具。


MiniExcel特点


  • 与其他Excel处理框架相比,MiniExcel具有如下特点:
  • 低内存耗用,避免OOM、频繁 Full GC 情况
  • 支持即时操作每行数据
  • 兼具搭配 LINQ 延迟查询特性,能办到低消耗、快速分页等复杂查询
  • 轻量,不需要安装 Microsoft Office、COM+,DLL小于150KB
  • 简便操作的 API 风格


Excel操作性能比较


以下是MiniExcel官方列出的与其他Excel框架的的性能比较。主要分为读取和写入,如下所示:


1. 导入和查询比较

逻辑 : 以 Test1,000,000x10.xlsx 做基准与主流框架做性能测试,总共 1,000,000 行 * 10 列笔 "HelloWorld",文件大小 23 MB


2. 导出和创建Excel


逻辑 : 创建1千万笔 "HelloWorld"

通过上述对比,可以发现,MiniExcel无论在读取,还是写入,性能都挺不错,值得学习。


MinExcel安装


在Visual Studio 2022中,可以通过Nuget包管理器进行安装,当前最新版本为v1.41.1,如下所示:


MinExcel读取


MiniExcel最强大之处,将Excel中的列和模型中的属性名,进行自动匹配,进而实现ORM,减少手动匹配的繁琐操作。如下所示:
当前有一个Persons.xlsx的Excel,如下所示:
我们创建一个Person的模型类,如下所示:
namespace DemoMiniExcel{    public class Person    {        public int ID { getset; }
        public string Name { getset; }
        public int Age { getset; }    }}
然后通过MiniExcel的Query方法进行查询,Query方法返回值支持泛型操作,传入指定的模型类对象,如下所示:
namespace DemoMiniExcel{    internal class Program    {        static void Main(string[] args)        {            string excel = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Person.xlsx");            var rows = MiniExcel.Query<Person>(excel).ToList();            if (rows.Count > 0)            {                foreach (var item in rows)                {                    Console.WriteLine($"ID={item.ID},Name={item.Name},Age={item.Age}");                }            }            Console.WriteLine("Hello, World!");        }    }}
测试示例,如下所示:
在上述示例中采用MiniExcel的Query方法只是其中一种方式,还可以通过MiniExcel对Stream的扩展方法Query进行操作,如下所示:
namespace DemoMiniExcel{    internal class Program    {        static void Main(string[] args)        {            string excel = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Person.xlsx");            using (var stream = File.OpenRead(excel))            {                var rows = stream.Query<Person>().ToList();                if (rows.Count > 0)                {                    foreach (var item in rows)                    {                        Console.WriteLine($"ID={item.ID},Name={item.Name},Age={item.Age}");                    }                }            }            Console.WriteLine("Hello, World!");        }    }}
实例运行效果和上面一样,不再赘述。

MinExcel写入


MiniExcel支持将对象数据写入到Excel,可以通过MiniExcel提供的SaveAs方法,将对象数据写入Excel,如下所示:

string excel = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Person2.xlsx");var persons = new List<Person>();for (int i = 0; i < 10; i++){    persons.Add(new Person()    {        ID = i,        Name = "A" + i.ToString(),        Age = 20 + i,    });}MiniExcel.SaveAs(excel, persons);

MiniExcel写入的Excel,默认还自带格式,如下所示:

同时MiniExcel,还支持Stream的读写方式创建Excel,如下所示:

string excel = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Person3.xlsx");var persons = new List<Person>();for (int i = 0; i < 10; i++){    persons.Add(new Person()    {        ID = i,        Name = "A" + i.ToString(),        Age = 20 + i,    });}using (var stream = File.Create(excel)){    stream.SaveAs(persons);}

实例运行后,导出的Excel效果和上面一样,不再赘述。



参考文档


本文主要介绍MiniExcel的简单用途,关于更多内容,请参考官方文档:https://gitee.com/dotnetchina/MiniExcel


阅读原文:原文链接


该文章在 2025/6/23 15:11:19 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved