WeihanLi.Npoi 1.10.0 更新日志

WeihanLi.Npoi 1.10.0 更新日志

Intro

上周有个网友希望能够导入Excel时提供一个 EndRowIndex 来自己控制结束行和根据字段过滤的功能,周末找时间做了一下这个 feature,并且解决了一个 Csv 导入的一个痛点,下面再具体介绍

EndRowIndex

SheetSetting 增加 EndRowIndex 以为了提前结束数据读取,比如说只读 TOP 100 条数据或者有一部分数据属于是不相关的垃圾数据,我们就可以利用这个配置来避免做一些不必要的数据读取(目前只对 Excel 导入生效)

DataValidation

一直没有做数据校验的功能,之前我的做法通常是先全部导入到一个 list 然后再过滤掉不符合要求的数据,这样做有些繁琐而且增加内存消耗,在这个版本中增加了数据校验的功能,用户可以设置一个委托来校验数据是否合法,如果导入的数据不合法则不会返回,只有合法的数据才会返回。(Csv 和 Excel 导入有效)

使用示例可以参考下面的单元测试

[Theory]
[InlineData(ExcelFormat.Xls)]
[InlineData(ExcelFormat.Xlsx)]
public void DataValidationTest(ExcelFormat excelFormat)
{IReadOnlyList<Notice> list = Enumerable.Range(0, 10).Select(i => new Notice(){Id = i + 1,Content = $"content_{i}",Title = $"title_{i}",PublishedAt = DateTime.UtcNow.AddDays(-i),Publisher = $"publisher_{i}"}).ToArray();var excelBytes = list.ToExcelBytes(excelFormat);var settings = FluentSettings.For<Notice>();lock (settings){settings.WithDataValidation(x => x.Id > 5);var importedList = ExcelHelper.ToEntityList<Notice>(excelBytes, excelFormat);Assert.Equal(list.Count(x => x.Id > 5), importedList.Count);int i = 0, k = 0;while (list[k].Id != importedList[i].Id){k++;}for (; i < importedList.Count; i++, k++){if (list[k] == null){Assert.Null(importedList[i]);}else{Assert.Equal(list[k].Id, importedList[i].Id);Assert.Equal(list[k].Title, importedList[i].Title);Assert.Equal(list[k].Content, importedList[i].Content);Assert.Equal(list[k].Publisher, importedList[i].Publisher);Assert.Equal(list[k].PublishedAt.ToStandardTimeString(), importedList[i].PublishedAt.ToStandardTimeString());}}settings.WithDataValidation(null);}
}

Csv new() constraint

Csv 导入移除了 new() 限制,这样解决了之前的一个痛点,就是当导入类型为 string 的时候,没办法直接导入,需要添加一个 model,包含一个 string 类型的属性,如此太麻烦了, new() 限制移除之后就可以直接导入为 List<string> 了,不再需要再建一个临时类了

var list = CsvHelper.ToEntityList<string>();

More

最近想把 Entity 配置的 Mapping 这种方式抽象出来,适用于所有需要映射关系配置的场景

Excel 做一层抽象,基于 NPOI 实现一套,基于 Epplus 实现一套,也可以基于 OpenXML 实现

以后有需要对 Word 或其他的需要,也可以像 Excel 一样,先做一层抽象,再根据相应的 Package 做实现即可

一直觉得有些纠结,如果这样子改了项目名叫 WeihaLi.Npoi 就不合适了,还没想好项目怎么命名,后面想好了,再新建项目或项目重命名吧,目前改了一部分,放在 vnext 分支上了,有兴趣的童鞋可以到 Github 看看,也非常欢迎各位给我提 feature request 或好的改进建议

Reference

  • https://github.com/WeihanLi/WeihanLi.Npoi

  • https://www.nuget.org/packages/WeihanLi.Npoi/

  • https://github.com/WeihanLi/WeihanLi.Npoi/issues/79

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git入门教程(一)

今天开始学习Git&#xff0c;所以就把每天学的东西写下来&#xff0c;不然真的太复杂&#xff0c;容易忘记呀。 这里推荐一个网站Webscripting2 — Serverside Webscripting — xx.git&#xff0c;英文一般般的都可以上去看看&#xff0c;我觉得非常直观。 首先Git&#xff0c;…

leetcode135. 分发糖果

一:论语 二:题目 三&#xff1a;上码 class Solution { public:int candy(vector<int>& ratings) {/**思路:1.这里我们分两次遍历(从左向右 从右向左)2.当我们从左向右遍历的时候 如果右边的评分比左边孩子分数高 那么右边孩子的糖果数上就在左边孩子糖果数上加一3.当…

Java国家/地区使用限制条款引发争议

喜欢就关注我们吧&#xff01;今天 JDK/Java 15 发布&#xff08;看今天推送的头条&#xff09;&#xff0c;在 RI 包里有开发者发现其标注了一则国际使用限制条款&#xff1a;由于某些国家/地区的知识产权保护和执法有限&#xff0c;因此 JDK 源代码只能分发到授权的国家/地区…

python函数参数那些事,关键字参数与位置参数

在调用函数时传给 function&#xff08;或 method&#xff09;的值。参数分为两种&#xff1a; 关键字参数 &#xff1a;在函数调用中前面带有标识符&#xff08;例如 name&#xff09;或者作为包含在前面带有 ** 的字典里的值传入。举例来说&#xff0c;3 和 5 在以下对 comp…

反射的基本知识(详解)

一:反射的引出 1:问题 比如我们给出一个student类 其方法show(),我们将其写入配置文件中&#xff1b;现在我们来一个新的需求说是要改变重写一个show()方法 show()2,那么如何在不修改源码的情况下进行修改&#xff0c;这时我们通过反射就可以完成 2:过程 student类&#xf…

.NET 5.0 RC1 发布,离正式版发布仅剩两个版本,与 netty 相比更具竞争力

原文&#xff1a;http://dwz.win/Qf8作者&#xff1a;Richard翻译&#xff1a;精致码农-王亮说明&#xff1a;1. 本译文并不是完全逐句翻译的&#xff0c;存在部分语句我实在不知道如何翻译或组织就根据个人理解用自己的话表述了。2. 本文有不少超链接&#xff0c;由于微信公众…

一个例子带你搞懂python作用域中的global、nonlocal和local

在编程中&#xff0c;只要接触过函数的&#xff0c;我相信都理解什么是全局变量和局部变量&#xff0c;概念比较简单&#xff0c;这里就不做解释了。在python中&#xff0c;用global语句就能将变量定义为全局变量&#xff0c;但是最近又发现有个nonlocal&#xff0c;一时搞不太…

初识ABP vNext(10):ABP设置管理

点击上方蓝字"小黑在哪里"关注我吧定义设置使用设置前言上一篇介绍了ABP模块化开发的基本步骤&#xff0c;完成了一个简单的文件上传功能。通常的模块都有一些自己的配置信息&#xff0c;比如上篇讲到的FileOptions类&#xff0c;其中配置了文件的上传目录&#xff0…

类加载机制(整个过程详解)

一:背景 类加载机制是在我们的真个java的运行阶段中的其中一个阶段。 二:什么是快乐星球(类加载机制) 我们编写的 Java 文件都是以.java 为后缀的文件&#xff0c;编译器会将我们编写的.java 的文件编译成.class 文件&#xff0c;简单来说类加载机制就是jvm从文件系统将一系…

每天一小时python官方文档学习(一)————python的简单介绍

我们都知道&#xff0c;python的官方文档写得十分详尽&#xff0c;也是每一个学习python的人都绕不开的。 所以从今天开始&#xff0c;我每天都会用一小时学习python的官方文档&#xff0c;按照文档目录的顺序&#xff0c;摘录一些有用的语句&#xff0c;写下一些个人心得放在博…

leetcode860. 柠檬水找零

一:论语 这里的小不忍指的是一方面我们受到挫折而控制不住自己而大发脾气&#xff0c;还有一方面指的是我们的过于优柔寡断&#xff0c;对于自己或者他人的过失&#xff0c;不忍心加以责罚。 二:题目 三:上码 class Solution { public:bool lemonadeChange(vector<int&g…

跟我一起学.NetCore之Asp.NetCore启动流程浅析

前言一个Asp.NetCore项目&#xff0c;知道大概的启动流程是有必要的&#xff0c;比如后续遇见配置信息覆盖等相关问题时也大概知道是什么原因&#xff0c;了解原因之后&#xff0c;再去搜索引擎找答案&#xff0c;否则目标不明确&#xff0c;茫茫人海怎么会一下找到自己想要的&…

每天一小时python官方文档学习(二)————流程控制工具

4. 其他流程控制工具 4.1. if 语句 大多数人都很熟悉的if语句&#xff1a; if condition1:pass elif condition2:pass else condition3:pass注意python中没有switch或case语句&#xff0c;所以一个 if ... elif ... elif ... 序列可以看作是其他语言中的 switch 或 case 语句…

leetcode406. 根据身高重建队列

一&#xff1a;你不一定逆风翻盘&#xff0c;但请一定向阳而生 二&#xff1a;题目 三&#xff1a;上码 class Solution { public:/**解析题意:这个给出的people的数组中,我们需要根据其元素people[i] [hi,ki];然后根据其ki来表示大于hi身高的人的个数&#xff0c;来进行排序…

.NET Core 下使用 RabbitMQ

介绍RabbitMQ是一个开源的,基于AMQP(Advanced Message Queuing Protocol)协议的完整,可复用的企业级消息队列(Message Queue 一种应用程序与应用程序之间的一种通信方法)系统,RabbitMQ可以实现点对点,发布订阅等消息处理模式官网&#xff1a;https://www.rabbitmq.com/dotnet.h…

每天一小时python官方文档学习(三)————函数

上一天看到第四章的一半&#xff0c;介绍了一些常用的流程控制工具&#xff0c;也就是常用语句&#xff0c;主要是if、for、range()、break、continue、else和pass。今天把第四章剩下的看完&#xff0c;讲的是如何在python中定义和使用函数。函数其实就是一种对代码的封装&…

leetcode452. 用最少数量的箭引爆气球

一:论语 少些自我感动&#xff0c;多谢反思&#xff0c;时刻警惕自己是否在假装很努力&#xff0c;自己懂不懂 自己会不会 自己想要什么 只有自己 最清楚 二&#xff1a;题目 三:上码 class Solution { public:/**思路:1.这道题类似无重叠空间,我们先按每个气球的右边界升序…

ASP.NET Core 3.x启动时运行异步任务(一)

这是一个大的题目&#xff0c;需要用几篇文章来说清楚。这是第一篇。一、前言在我们的项目中&#xff0c;有时候我们需要在应用程序启动前执行一些一次性的逻辑。比方说&#xff1a;验证配置的正确性、填充缓存、或者运行数据库清理/迁移等。如何合理、有效、优雅地完成这个任务…

每天一小时python官方文档学习(四)————数据结构之列表

终于进入到第五章数据结构部分了&#xff0c;python中常用的容器有列表、元组、集合和字典&#xff0c;今天主要了解的是最为常用的列表。 5. 数据结构 5.1. 列表的更多特性 对于列表的操作有很多&#xff0c;具体操作看官方文档就行&#xff0c;但是我们对列表有什么操作&a…

leetcode435. 无重叠区间

一&#xff1a;论语 道不同 不相为谋 我们没有理由拿着自己的评判标准 去看待别人所经历的事情&#xff0c;重来就没有真正的感同身受&#xff0c;我们能做的就是尊重他人的看法 &#xff0c;保留自己的态度。 二&#xff1a;题目 三:上码 class Solution { public:/**思路:…