美文网首页开源项目
不会真有人还不会调用Excel吧?

不会真有人还不会调用Excel吧?

作者: 开源指北 | 来源:发表于2022-03-23 20:59 被阅读0次

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

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

1. 控件介绍

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

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

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

image

项目目标是:力求做最简单、最实用的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。测试结果列在下图中:

image

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

image

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\>();
image
  1. 指定单元格开始读取数据
    MiniExcel.Query(path,useHeaderRow:true,startCell:"B3")
image
  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吧?

    哈喽,大家好!我是指北君。 大家有没有过这样的经历:开发某个项目,需要调用Excel控件去生成Excel文件、填充...

  • 明明车在遵义,车主却收到短信说在贵阳交通违法?

    不会吧, 不会吧, 不会还有人不知道大数据的厉害吧? 真!的!会! 还有人不知道, 如今物联网、边缘计算、 云计算...

  • 扔掉PPT,用思维导图给你全新不一样的演示效果!

    有人说,会用Word,不如会Excel,会Excel的,不如会PPT的!而现实也确实如此,你要是不会点PowerP...

  • js创建新文件在下载

    直接调用: 指定字符集是因为office的Excel中文会出现乱码,而WPS的Excel不会(兼容微软)。

  • VSTO基本语句

    调用Excel的对象时,必须先声明Excel自身。 Dim xlApp As Excel.Application ...

  • Spring Cloud Commons 之 loadbalan

    不会真的有人看吧? 不会真的有人点赞吧? 不会吧? 不会吧!!! Spring Cloud Commons 是什么...

  • 不会吧,不会吧,你还不会微服务?

    什么是微服务? 微服务特点: 1.单一职责的。一个微服务应该都是单一职责的,这才是“微”的体现,一个微服务解决一个...

  • 明天

    明天我还不知道会怎么样,希望不会太差吧!但也不重要,该怎么做就怎么做呗! 明天还不知道会吃什么,也许会有好吃的吧!...

  • 分享一些の意难平文案

    ❶ 为什么你不在 问山风你会回来 ❷ 一厢情愿就该愿赌服输 ❸ 你不会真以为会有人像拍电影一样喜欢你四五年吧 ❹ ...

  • “和我聊聊天吧。” “你怎么还不会说话啊?” “喂!来个人理理我。” “真烦。” 这里径方约摸两公里,沿岸只有幽蓝...

网友评论

    本文标题:不会真有人还不会调用Excel吧?

    本文链接:https://www.haomeiwen.com/subject/hnuqjrtx.html