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 看

Reference

WeihanLi.Npoi 1.10.0 更新日志的更多相关文章

  1. WeihanLi.Npoi 1.13.0 更新日志

    WeihanLi.Npoi 1.13.0 更新日志 Intro 在 Github 上收到 Issue 收到网友反馈希望支持自动分 Sheet 导出,有兴趣的可以参考 Issue https://git ...

  2. WeihanLi.Npoi 1.7.0 更新

    WeihanLi.Npoi 1.7.0 更新介绍 Intro 昨天晚上发布了 WeihanLi.Npoi 1.7.0 版本,增加了 ColumnInputFormatter/ColumnOutputF ...

  3. WeihanLi.Npoi 1.11.0/1.12.0 Release Notes

    WeihanLi.Npoi 1.11.0/1.12.0 Release Notes Intro 最近 NPOI 扩展新更新了两个版本,感谢 shaka chow 的帮忙和支持,这两个 Feature ...

  4. WeihanLi.Npoi 1.14.0 Release Notes

    WeihanLi.Npoi 1.14.0 Release Notes Intro 周末更新了一下项目,开始使用可空引用类型,并且移除了 net45 的支持,仅支持 netstandard2.0 Cha ...

  5. WeihanLi.Npoi 1.16.0 Release Notes

    WeihanLi.Npoi 1.16.0 Release Notes Intro 最近有网友咨询如何设置单元格样式,在之前的版本中是不支持的,之前主要考虑的是数据,对于导出的样式并没有支持,这个 is ...

  6. MariaDB——(二) MariaDB 10.0.15 日志文件—undo 日志

          日志的记录和维护是数据库中相当重要的内容,写这篇文章和后面几篇文章作为学习官网文档的笔记.MariaDB数据库日志可分为二进制日志.查询日志.错误日志.myISAM表日志.relay日志和 ...

  7. iOS 10.0 更新点(开发者视角)

    html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padding: 0 ...

  8. [开源] .Net ORM FreeSql 1.10.0 稳步向行

    写在开头 FreeSql 是 .NET 开源生态下的 ORM 轮子,转眼快两年了,说真的开源不容易(只有经历过才明白).今天带点干货和湿货给大家,先说下湿货. 认识我的人,知道 CSRedisCore ...

  9. WeihanLi.Npoi 近期更新

    WeihanLi.Npoi 近期更新 Intro 最近对我的 NPOI 扩展做了一些改变,一方面提高性能,一方面修复bug,增加一些新的功能来让它更加好用,前几天发布了 1.5.0 版本,下面来介绍一 ...

随机推荐

  1. [源码分析]ArrayList和LinkedList如何实现的?我看你还有机会!

    文章已经收录在 Github.com/niumoo/JavaNotes ,更有 Java 程序员所需要掌握的核心知识,欢迎Star和指教. 欢迎关注我的公众号,文章每周更新. 前言 说真的,在 Jav ...

  2. 使用Spring Boot开发者工具进行自动重启和页面自动刷新

    简介 大家可能都听说过开发Node.js应用时可以使用多种工具对开发者提供便利,如WebPack提供了开发者服务器来支持js应用动态更替,并在保存文件时自动刷新浏览器.Spring Boot也提供了相 ...

  3. Python爬取表结构数据---pandas快速获取

    例如: 此形式的表数据,可用pandas获取 首先获取table import requests from lxml import etree import pandas as pd url = 'h ...

  4. iNeuOS工业互联平台,WEB组态(iNeuView)集成图报组件,满足实时数据图形化展示的需求

    目       录 1.      概述... 1 2.      平台演示... 2 3.      应用过程... 3 4.      实时数据展示效果... 5 1.   概述 市场和开源社区有 ...

  5. unity探索者之安卓微信登录,非第三方插件

    版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/7666348.html 之前写了两篇关于微信分享的博客,其实微信登录.分享.支付博主 ...

  6. PythonCrashCourse 第四章习题

    Python 从入门到实践第四章习题 4.1想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用for 循环将每种比萨的名称都打印出来 修改这个for 循环,使其打印包含比萨名称的句子,而不仅仅 ...

  7. 【MySQL】记一次线上重大事故:二狗子竟然把线上数据库删了!!

    写在前面 估计二狗子这几天是大姨夫来了,心情很郁闷,情绪也很低落,工作的时候也有点心不在焉.让他发个版本,结果,一行命令下去把线上的数据库删了!你没听错:是删掉了线上的数据库!运营那边顿时炸了锅:怎么 ...

  8. JavaSwing关于GridBagLayout(网格袋布局)的使用

    下面的链接有初步的介绍: https://blog.csdn.net/xietansheng/article/details/72814552 关于GridBagConstraints: GridBa ...

  9. Spring Boot 集成 Memcached

    Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站 ...

  10. 区块链入门到实战(31)之Solidity – 第一个程序

    为简单起见,我们使用在线Solidity开发工具Remix IDE编译和运行Solidity程序. 第1步 – 在File explorers选项卡下,新建一个test1.sol文件,代码如下: 示例 ...