哈喽,大家好!我是指北君。

大家有没有过这样的经历:开发某个项目,需要调用Excel控件去生成Excel文件、填充数据、改变格式等等,常常在测试环境中一切正常,但在生产环境却无法正常调用Excel,不是安装的Excel版本不正确导致调用错误,就是因为超额数据量导致调用控件消耗内存过大,无法顺利解决问题,搞得码农心态崩溃,导致DeadLine延迟?现在好了,铛铛铛,值得推荐的一款实用控件来了:MiniExcel!

1. 控件介绍

MiniExcel简单、高效避免'OOM'的.NET处理Excel查、写、填充数据工具。

'OOM',全称“Out Of Memory”,意思是“内存用完了”。它来源于java.lang.OutOfMemoryError。

目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel尝试以 Stream角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况,而且不再要求系统本身必须安装Excel。

项目目标是:力求做最简单、最实用的Excel控件!

这个项目已经被dotNET China收录,成为一个很有前途的开源项目,并在Gitee上得到站点推荐,得到了1.1KStars。

2. 特点简述

  • 支持.Net4.5,.Net5.0,Core .Net2.0。

  • 低内存耗用,避免'OOM'(out of memoery)、频繁 Full GC 情况。

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

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

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

  • 简便操作的 API 风格。

3. 安装

这个项目是通过NuGet包实现安装。简单来说,就是在.NET CLI模式下,执行如下命令即可自动安装:

    dotnet add package MiniExcel --version 1.23.2

4. 性能比较与测试

Benchmarks 逻辑可以在 MiniExcel.Benchmarks 中进行查看或是提交 PR,运行指令如下:

    dotnet run -p .\\benchmarks\\MiniExcel.Benchmarks\\ -c Release -f netcoreapp3.1 \-- -f \* --join

最后一次运行规格、结果 :

BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042

Intel Core i7-7700 CPU 3.60GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical
cores [Host] : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT Job-ZYYABG : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT IterationCount=3 LaunchCount=3 WarmupCount=3

现在我们做一个查询、导入性能比较:

逻辑 : 以 Test1,000,000x10.xlsx 做基准与主流框架做性能测试,总共 1,000,000 行 *

10 列笔 "HelloWorld",文件大小 23 MB。测试结果列在下图中:

导出、创建Excel性能比较参见下图:

5. 示例:

下面将给出部分样例和效果图,供大家参考。
  1. 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\>();

  1. 指定单元格开始读取数据
    MiniExcel.Query(path,useHeaderRow:true,startCell:"B3")

  1. 查询所有 Sheet 名称跟数据
    var sheetNames = MiniExcel.GetSheetNames(path);
foreach (var sheetName in sheetNames)
{
var rows = MiniExcel.Query(path, sheetName: sheetName);
}
  1. 查询所有栏(列)
    var columns = MiniExcel.GetColumns(path); // e.g result : ["A","B"...]

高频使用示例就介绍到这里啦,有需求的伙伴可以自行获取项目地址学习更多优秀示例。

6. 指北君有话说

这个开源项目提供全部源代码,方便大家下载,还提供了很详细的文档说明。

以指北君使用经验来看,这个控件已经基本满足了调用Excel控件开发需求,大家可以多多尝试。而且,这个项目的团队依然在继续维护,让人很看好。

有一个这么好用的工具,在项目开发过程中会让你不用担心内存不够用,不用考虑对Excel的内容大小进行限制。所以指北君很有诚意的推荐这款Mini控件啦。还有,通过对源代码的学习,可以提高自己的水平。

以上就是本次推荐的全部内容啦,这里是指北君,感谢各位的观看,如果你觉得内容还不错,欢迎点赞、收藏和评论。

关注"开源指北"公众号,我们立志做最好的开源项目分享平台,这里不仅仅有各种有趣且实用的开源项目,还会定期分享关于Java,并发编程,性能优化,中间件服务,架构设计等相关后端知识与面试,就业,找工作,简历模板等就业大计,拥有我就相当于拥有整个互联网宝库,快来聊一聊吧!

这里是“开源指北” 我们做开源 不只是开源。

关注公众号[开源指北]回复[Excel]即可获得更多相关资料。

不会真有人还不会调用Excel吧?的更多相关文章

  1. 比真机还快的Android模拟器——Genymotion

    比真机还快的Android模拟器--Genymotion                                                     ----转载请注明出处:coder-p ...

  2. 【Java 关键字this 的使用】还阔以调用重载的构造方法

    笔记: /** this 关键字的使用除了调用方法和变量外, * 还可以用来显示 调用当前类的重载的指定的构造方法! * 同时也应该必须放到该方法内部的首行! */ 测试: import java.l ...

  3. C#调用Excel VBA宏

    近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的,也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进 ...

  4. c# 调用EXCEL在VS上能正常运行,部署在IIS上不能实现,在VS中运行页面和发布之后在IIS中运行的区别

    发现一篇文章,很好,解决了这个问题:感谢原博主!特此做个笔记. 地址:http://www.cnblogs.com/zhongxinWang/p/3275154.html 发布在IIS上的Web程序, ...

  5. C#调用Excel VBA宏[转载]

    原文地址:https://www.cnblogs.com/heekui/archive/2008/03/30/1129355.html 近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有E ...

  6. C# 调用Excel 出现服务器出现意外情况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)

    C# 调用Excel 出现服务器出现意外情况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT) private Microsoft.Office.Intero ...

  7. Ruby调用Excel相关的函数

    require 'win32ole'myexcel = WIN32OLE.new("excel.application")#WIN32OLE.open 方法打开用例文件,用Call ...

  8. c#调用Excel绘制图表

    c#调用Excel需要引用命名空间 using Microsoft.Office.Interop.Excel; 由于该程序不复杂,主要是根据不同数据画表和图,画的图像也并不复杂,因为画图和画表的操作会 ...

  9. 调用Excel宏批量处理文件

    '1.用户可以任意选择文件夹进行遍历 '2.限定遍历时仅搜索EXCEL文件(你可以改变文件类型) '这个程序要先在“引用”下选择"microsoft scripting runtime&qu ...

随机推荐

  1. Solution -「SV 2020 Round I」SA

    \(\mathcal{Description}\)   求出处 owo.   给定一个长度为 \(n\),仅包含小写字母的字符串 \(s\),问是否存在长度为 \(n\),仅包含小写字母的字符串 \( ...

  2. mysql数据库怎么存入emoji表情

    第一步 设置数据库字符编码为utf8mb4_general_ci  设置相应表字段字符编码为utf8mb4_general_ci 第二步 设置my.cnf增加以下配置信息 [client] defau ...

  3. python控制浏览器上传文件

    自动化爬虫方法和库很多,难点大多数在登录.可以大致分为:普通验证码,扫码登录,QQ一键登录,拖动验证,无痕验证,人工识别(比如12306登录) 万能大法可以破解一切以上需求,自动控制浏览器行为 参考文 ...

  4. [VSCode] Todo Tree VSCode插件 待办事项树

    Todo Tree 一款待办事项插件 我们写程序的时候,难免会遇到一些情况需要标记或者搁置,在写代码的时候会用一些特殊的注释来表示不同的内容,使我们可以快速的定位我们注释的位置. 主要有以下几种: T ...

  5. python-利用xlrd模块中读取有合并单元格的excel数据

    前言 对于excel中有合并单元格的情况,合并的单元格只能取到第一个单元格的值,合并的单元格后面的单元格内容的值为空,针对这个情况,写了下面一段代码实现, 对单元格进行判断,如果是传入的索引是合并单元 ...

  6. 来自牛逼哥的阴间MD5(web)

    这个web题目是来自队里面牛逼哥的题目,审计源码, 看到这两个参数,前面的a和b就是直接输出数字,再看下面的,需要弱比较的输出一个c,要求应该是需要一个加密之前是一个0e开头的字符串,加密之后还是0e ...

  7. jQuery下载安装使用教程

    一:下载jQuery 下载链接:jQuery官网 中文文档:jQuery AP中文文档 1.jQuery版本 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增.因此一般项目来说 ...

  8. 企业为什么需要BI报表工具?

    企业一旦成规模运作起来,数据量是数以万计的,无论数据还是报表都需要协同管理不断更新.面对各大OA\ERP\CRM系统的数据,传统用Excel处理数据效率是很低下的.要想快速出报表,快速取数,快速做业务 ...

  9. linux常用命令与实例小全

    转至:https://www.cnblogs.com/xieguohui/p/8296864.html  linux常用命令与实例小全 阅读目录(Content) 引言 一.安装和登录 (一)    ...

  10. 三、ES6中数组拓展

    一.Array.of() 将参数中所有值作为元素形成数组: console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4] 参数的值可以为不同的类型: conso ...