浩克网 手游攻略 软件教程 NET操作Excel高效低内存的开源框架

NET操作Excel高效低内存的开源框架

时间:2024-04-02 14:12:48 来源:网络整理 浏览:0

有两种主要的方法来操作Excel。Net平台。第一,把Excel文件看成一个数据库,由OleDb读取和操作。第二,调用Excel的COM组件。两种方法各有特点。

今天给大家介绍第三种方法:外挂法。目前大多数主流框架都需要将所有数据加载到内存中以便于操作,但这样会导致内存消耗问题。MiniExcel尝试从流的角度写底层算法逻辑。

可以将原来1000多MB的占用减少到几MB,避免内存不足的情况。MiniExcel简单高效,避免了OOM的。NET处理Excel工具,用于搜索、写入和填充数据。

特点内存消耗低,避免了OOM和频繁全GC的情况,支持每一行数据的实时操作,结合LINQ延迟查询特性,可以实现低消耗、快速分页等复杂查询功能。

You don't need to install Microsoft Office, COM,

DLL小于150KB API风格性能对比,测试导入,查询Excel对比逻辑:以Test1,000,000x10.xlsx为基准,用主流框架做性能测试。

总共1,000,000行* 10列的笔‘hello world’,文件大小为23 MB。导出并创建Excel比较逻辑:创建1000万个“HelloWorld”

使用示例

1、读/导入Excel1.1查询查询擅长返回强型别IEnumerable数据public类用户帐户{ public Guid ID { get设置;}公共字符串名称{获取设置;}公共日期时间BoD { get设置;} public int Age { get设置;} public bool VIP { get设置;}公共小数点{获取设置;}}var rows=MiniExcel .查询(路径);//orusing (var stream=File .var rows=stream .query();

Can cooperate with LINQ first/band/skip to achieve low consumption and high efficiency for complex queries var row=MiniExcel. Query (path). first(); Assertion. Equal('HelloWorld 'row。 a); //orusing (var stream=File。 OpenRead(path)){ var row=stream。 Query (). first(); Assertion. Equal('HelloWorld 'row。 a); } Efficiency comparison with other frameworks:

1.3阅读大文件的盘基缓存-SharedString的概念:当MiniExcel判断文件SharedString的大小超过5MB时,会默认使用本地缓存。

比如10x100000.xlsx(一百万条数据),在不打开本地缓存的情况下读取所需的最大内存占用约为195MB,打开后减少到65MB。不过需要注意的是,这种优化是以时间换取内存的减少,所以读取效率会变慢。

在这个例子中,读取时间从7.4秒增加到27.2秒。如果没有必要,请使用以下代码关闭硬盘缓存。

var config=new openxml configuration { EnableSharedStringCache=false }; Mini Excel. Query (path, configuration: configuration) can also use SharedStringCacheSize to adjust the shared string file size beyond the specified size before hard disk caching.

var config=new OpenXmlConfiguration { SharedStringCacheSize=500*1024*1024 };MiniExcel.Query(path, configuration: config);

Please don't read all the data into memory by means of ToList unless necessary. 2.1 supports the collection anonymous category or strongly typed var path=Path. Combination (path. GetTempPath(),$'{Guid。 NewGuid()}。 xlsx’); Mini Excel. SaveAs(path,new[] { new { Column1='MiniExcel 'Column2=1 },new { Column1='Github 'column 2=2 } }); 2.2 IDataReader is recommended.

3.模板填充的Excel声明类似于Vue template {{variable name}},或者set rendering {{set name。字段名}}集合渲染支持IEUMERABLE/DATABLE/dapper row 3.1基本填充。

//1.By POCOvar value=new{ Name='Jack 'CreateDate=new DateTime(2021,01,01),VIP=true,Points=123 };迷你Excel .SaveAsByTemplate(路径,模板路径,值);//2 . by Dictionary var value=new Dictionary(){[' Name ']=' Jack '[' create date ']=new DateTime(2021,01,01),['VIP']=true,[' Points ']=123 };迷你Excel .SaveAsByTemplate(路径,模板路径,值);3.2 复杂数据填充

//1 . by poco var value=new { title=' foo company 'managers=new[] { new {name='Jack 'department='HR'},new {name='Loan 'department='IT'},employees=new[] { new {name='Wade 'department='HR'},new {name='Felix 'department='HR'},new {name='Eric 'department='IT'},new {name='Keaton 'department=' IT ' };迷你Excel .SaveAsByTemplate(路径,模板路径,值);//2 . by Dictionary var value=new Dictionary(){[' title ']=' foo company '[' managers ']=new[]{ new { name=' Jack 'department='HR'},new {name='Loan 'department='IT'},[' employees ']=new[]{ new { name=' Wade 'department='HR'},new {name='Felix 'department='HR'},new {name='Eric 'department='IT'},new { name=' IT ' },new { name='迷你Excel .SaveAsByTemplate(路径,模板路径,值);4、Excel列属性(Excel列属性)

卡特格里安科恩的流不是最好的,因为他自己就是最好的流。SaveAs(excelType:ExcelType).CSV);orstream的SaveAs(excelType:ExcelType).XLSX);orstream的. Query(excel type:excel type)CSV);orstream的. Query(excel type:excel type)XLSX);GithubAdresse private ant wort:1011,

标题:NET操作Excel高效低内存的开源框架
链接:https://www.52hkw.com/news/rj/58046.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
Tiktok专用的梯子加速器(TK加速器全球加速)

Tiktok作为当前最火爆的短视频平台,受到了全球用户的热烈欢迎。然而,由于网络限制或者其他原因,很多用户在观看

2024-04-02
怎么不让快递放菜鸟驿站

菜鸟裹裹怎么禁止放快递?经常网购的小伙伴都知道,如果附近有菜鸟驿站,那么驿站的快递员会默认选择放在驿站中,并

2024-04-02
菜鸟驿站怎么送货上门

菜鸟裹裹怎么送货上门?有过菜鸟驿站拿快递的小伙伴都知道,很多菜鸟驿站在派送快递时,默认是放在菜鸟驿站,需要我

2024-04-02
德国游戏排行榜前十名(德国出品的游戏)

中国的玩家可能在新闻里听过德国科隆游戏展,但对德国的游戏却感觉很陌生。游戏玩家大部分多少应该都体验过SL

2024-04-02