WeihanLi.Npoi 近期更新

WeihanLi.Npoi 近期更新

Intro

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

默认导入/导出格式变更

在 1.5.0 版本中,将默认导入/导出的excel格式从 xlsx 改为 xls 以获得更好的性能,需要注意的是 xls 格式的 excel 文件一个 sheet 最多 65535 行数据,超过的话会报错。xls 可以有更好的性能和更优的内存分配,xlsx 可能是因为要和 xlsx 保持一致的接口,一致的编程体验才会性能有点问题,建议最好使用 xls 格式的 excel

具体的性能测试可以参考 Github,这里贴几张图:

  • 基本测试:https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/perf/WeihanLi.Npoi.Benchmark/BenchmarkDotNet.Artifacts/results/WeihanLi.Npoi.Benchmark.WorkbookBasicTest-report-github.md

  • Excel 导出测试:https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/perf/WeihanLi.Npoi.Benchmark/BenchmarkDotNet.Artifacts/results/WeihanLi.Npoi.Benchmark.ExportExcelTest-report-github.md

  • Excel 导入测试:https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/perf/WeihanLi.Npoi.Benchmark/BenchmarkDotNet.Artifacts/results/WeihanLi.Npoi.Benchmark.ImportExcelTest-report-github.md

640?wx_fmt=png

导出数据较多,截图难以完整展示,建议看 Github 上的测试结果,或者自己拉取代码,在自己电脑上跑测试640?wx_fmt=png

640?wx_fmt=png

ColumnWidth 的变化

原来的版本,会自动调整列宽,应网友的请求在 1.4.0 版本中增加了 ColumnWidth 的配置来自定义列宽,issue:https://github.com/WeihanLi/WeihanLi.Npoi/issues/30

可以通过 Attribute [Column(Width=100)] 或者通过 FluentAPI HasColumnWidth(100) 来自定义列宽

同时出于导出性能的考虑,在 1.5.0 版本中移除了自动列宽的配置,如果需要启用自动列宽,可以通过 Sheet 的配置来实现

  • Attribute 方式: [Sheet(SheetIndex=0,SheetName="TestSheet",AutoColumnWidthEnabled=true)]

  • FluentAPI: setting.HasSheetConfiguration(0,"SystemSettingsList",true)

OutputFormatter/InputFormatter

在 1.3.7 版本中引入了 ColumnFormatter 来使得用户可以自定义导出,让导出变得更加灵活,可以自定义一个委托来指定导出的值。

在 1.4.5 版本将 ColumnFormatter 变更为 OutputFormatter,并增加了 InputFormatter 来使得导入更加灵活

看个示例:

var setting = ExcelHelper.SettingFor<TestEntity>();	
// ExcelSetting	
setting.HasAuthor("WeihanLi")	.HasTitle("WeihanLi.Npoi test")	.HasDescription("WeihanLi.Npoi test")	.HasSubject("WeihanLi.Npoi test");	
setting.HasSheetConfiguration(0, "SystemSettingsList", 1);	
// setting.HasFilter(0, 1).HasFreezePane(0, 1, 2, 1);	
setting.Property(_ => _.SettingId)	.HasColumnIndex(0);	
setting.Property(_ => _.SettingName)	.HasColumnTitle("SettingName")	.HasColumnIndex(1);	
setting.Property(_ => _.DisplayName)	.HasOutputFormatter((entity, displayName) => $"AAA_{entity.SettingName}_{displayName}")	.HasInputFormatter((entity, originVal) => originVal.Split(new[] { '_' })[2])	.HasColumnTitle("DisplayName")	.HasColumnIndex(2);	
setting.Property(_ => _.SettingValue)	.HasColumnTitle("SettingValue")	.HasColumnIndex(3);	
setting.Property(_ => _.CreatedTime)	.HasColumnTitle("CreatedTime")	.HasColumnIndex(4)	.HasColumnWidth(10)	.HasColumnFormatter("yyyy-MM-dd HH:mm:ss");	
setting.Property(_ => _.CreatedBy)	.HasColumnIndex(4)	.HasColumnTitle("CreatedBy");

通过 OutputFormatter/ InputFormatter 我们可以大大提高导出/导入的灵活性,CSV 也同样适用

小功能

  • 增加了导入 excel 时根据导入的文件内容自动调整列的顺序,这样即使不是严格按照配置的列顺序定义的excel文件也可以正常的读取

  • 增加了 ExcelHelper.LoadExcel()ExcelHelper.ToEntityList Streambyte[] 的重载,使得用户可以直接从上传的文件流或者一个字节数组中获取 excel 内容

  • 增加了 CsvHelper.ToEntityList(byte[]bytes)/CsvHelper.ToEntityList(Streamstream)

  • 导出 excel 时增加 sheetIndex 参数,支持按某一个 sheet 导出,原来只能导出第一个 sheet

  • 修复了 excel 导入导出不区分 string.Empty/null 的问题

  • 修复了一些 csv 导入导出的bug

  • 增加了对更多格式的读取,对于下面这些格式的文件都按照 xlsx 处理,

*.xlsx:基于XML文件格式的Excel 2007工作簿缺省格式 *.xlsm:基于XML且启用宏的Excel 2007工作簿 *.xltx:Excel2007模板格式 *.xltm:Excel 2007宏模板 *.xlam:Excel 2007宏加载项 *.xlsb:Excel2007为大的或复杂的工作簿新引入的非XML二进制文件格,允许优化执行和向后兼容。

More

可以查看 Github 上的 ReleaseNotes 来查看最近更新

更多详情可以参考 Github 上的 PR,现在每一次包版本的更新都会有相应的 PR,PR 合并之后通过 Azure Devops 自动发布 nuget 包

希望打造一个更好的 Excel 导入导出工具,欢迎使用,欢迎给我提 issue,bug/feature 都欢迎

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

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

相关文章

【.NETCore 3】Ids4 ║ 多项目集成统一认证中心的思考

前言哈喽大家好&#xff0c;好久都没有写文章了&#xff0c;这次又重新开始写技术文章了&#xff0c;半年前我还是一直保持每周都写文章的&#xff0c;后来是为了响应群友的号召&#xff0c;开始踏上了录制视频&#xff08;https://www.bilibili.com/video/av58096866&#xff…

.NET 社区 NB,2019 中国 .NET 开发者峰会

点击蓝字关注我们作为广州 .NET 技术俱乐部的一名成员&#xff0c;很荣幸以志愿者的身份见证并参与了 首届社区组织的中国 .NET 开发者峰会 &#xff0c;这次大会共分为三天&#xff0c;第一天的 .NET 之夜&#xff0c;第二天的 .NET 开发者峰会&#xff0c;第三天的 .NET Core…

SQL Server 中 JSON_MODIFY 的使用

SQL Server 中 JSON_MODIFY 的使用IntroSQL Server 从 2016 开始支持了一些 JSON操作&#xff0c;最近的项目里也是好多地方直接用字段直接存成了 JSON&#xff0c;需要了解一下怎么在SQL Server 中操作 JSON.JSON支持适用于 SQL Server 2016 及以上版本 和 Azure SQL Database…

TypeScript 3.7稳定版发布

TypeScript 3.7 发布了&#xff0c;此版本带来了许多新特性。Optional Chaining首先一大亮点是 Optional Chaining&#xff0c;这是社区呼唤特别强烈的一个 ECMAScript 特性。最初它是 TypeScript 的 issue 跟踪器上第 16 个 issue&#xff0c;于 5 年前提交&#xff0c;要知道…

.NET手撸绘制TypeScript类图——上篇

.NET手撸绘制TypeScript类图——上篇近年来随着交互界面的精细化&#xff0c; TypeScript越来越流行&#xff0c;前端的设计也越来复杂&#xff0c;而 类图正是用简单的箭头和方块&#xff0c;反映对象与对象之间关系/依赖的好方式。许多工具都能生成 C#类图&#xff0c;有些工…

阅读源码学设计模式-单例模式

有些编码套路是公认的&#xff0c;大家都参照其编写符合可观赏性的代码&#xff0c;那就是设计模式现在.NETcore 默认提供了DI功能&#xff0c;那我想设计一个全局的引擎类&#xff0c;进行注入服务、解析服务、配置中间件。并且要求该引擎类全局唯一&#xff0c;其他地方不能进…

我终于知道post和get的区别

IT界知名的程序员曾说&#xff1a;对于那些月薪三万以下&#xff0c;自称IT工程师的码农们&#xff0c;其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居&#xff0c;但只是他们一厢情愿罢了。码农&#xff1a;你知道get和post请求到底有什么区别&am…

【译】使用Blazor构建桌面应用

随着最近.NET Core 3的正式发布&#xff0c;我认为我会尝试一个有趣的小实验。我喜欢使用Electron来创建基于Web的桌面应用程序。我想了解有关Blazor&#xff08;ASP.NET系列的最新成员&#xff09;的更多信息。在这篇文章中&#xff0c;我将向您确切演示如何在15分钟内开始使用…

CAP的学习和应用

前言:用CAP有一段时间了,这里简单记录一下,这么好用的东西,小伙伴们赶紧上车吧一.CAP使用场景?平时工作中经常使用到MQ,如(kafka,rabbitmq...),用来简单的发布/订阅,经常会遇到以下几个问题常用方案,把SQL放前面,MQ放后面,MQ执行失败了,我们把整个SQL进行回滚,这种方案在单应用…

[功能发布]Excel催化剂地图可视化功能正式发布,欢迎使用!

地图可视化功能开发完成已过去1个多月&#xff0c;文章的阅读量与初定传播目标相差甚远。但因着热爱分享的缘故&#xff0c;在阅读量未及预期时&#xff0c;仍然破例对其功能进行发布。若真正喜爱Excel催化剂所开发的地图可视化&#xff0c;可通过完成小任务来获取使用资格。再…

WebAssembly生态将完善网络安全性

近日 Mozilla、Fastly、Intel 与 Red Hat 宣布成立联合组织 Bytecode Alliance&#xff08;字节码联盟&#xff09;&#xff0c;该联盟旨在通过协作实施标准和提出新标准&#xff0c;以完善 WebAssembly 在浏览器之外的生态。WebAssembly 也叫 Wasm&#xff0c;它是为基于栈的虚…

我们终于可以把 bug 留给子孙后代了

“ 阅读本文大概需要 4 分钟。 ”今天在聊项目之前&#xff0c;我们先来聊一下历史。中学时候拿到的第一本历史书&#xff0c;上面是从智人的起源讲起的&#xff0c;他轻轻掠过尧舜禹&#xff0c;秦始皇统一六国&#xff0c;千古一相李斯。他喊二川溶溶&#xff0c;流入宫墙。五…

30分钟无坑部署K8S单Master集群

Jesse导读&#xff1a;11月9号&#xff0c;我在中国.NET开发者峰会&#xff08;.NET Conf China 2019)上分享了之前ASP.NET Core和Kubernetes做微服务的经验&#xff0c;在10号的时候又联合张善友、陈计节两位大佬一起做了一个6个小时的动手实践&#xff0c;得到了非常好的反馈…

亲自实践Blazor构建桌面应用程序

首先是安装.NET Core 3.0 与Node.js.Net Core 版本为&#xff1a;3.0.100Node.js安装版本为&#xff1a;v12.13.0用到的8个命令mkdir blazor-electron-democd blazor-electron-demodotnet new blazorserver --no-httpsdotnet add package ElectronNET.APIdotnet new tool-manif…

行云万里,转型未来 | 行云创新受邀参加2019中国.NET开发者峰会

2019 年 11 月 9 日&#xff0c;中国 .NET 开发者峰会&#xff08;.NET Conf China 2019&#xff09;在上海拉开帷幕&#xff0c;这是中国 .NET 社区的年度盛会。行云创新受邀参加了此次峰会&#xff0c;为当前最热门的科技专题带来了精彩的演讲&#xff0c;与全国的 .NET 开发…

西安活动 | 云时代,享未来 .NET 线下沙龙

活动介绍:在云时代到来的今天&#xff0c;越来越多的应用已经依赖于云而构建&#xff0c;这正得益于云给软件开发带来的低成本&#xff0c;易扩展&#xff0c;可重用的便捷之处。.NET Core平台就是为云而诞生的&#xff0c;毫无疑问它是构建云应用的首要之选。已经磨练5年时间&…

.NET手撸绘制TypeScript类图——下篇

.NET手撸绘制TypeScript类图——下篇在上篇的文章中&#xff0c;我们介绍了如何使用 .NET解析 TypeScript&#xff0c;这篇将介绍如何使用代码将类图渲染出来。类型定义渲染不出意外&#xff0c;我们继续使用 FlysEngine。虽然文字排版没做过&#xff0c;但不试试怎么知道好不好…

China .NET Conf 2019-.NET技术架构下的混沌工程实践

这个月的8号、9号&#xff0c;个人很荣幸参加了China.NET Conf 2019 , 中国.NET开发者峰会&#xff0c;同时分享了技术专题《.NET技术架构下的混沌工程实践》&#xff0c;给广大的.NET开发小伙伴介绍混沌工程和高可用性改造实践。会后大家伙聚餐的时候&#xff0c;陈计节老师建…

分布式应用框架 Dapr

微服务架构已成为构建云原生应用程序的标准,微服务架构提供了令人信服的好处&#xff0c;包括可伸缩性&#xff0c;松散的服务耦合和独立部署&#xff0c;但是这种方法的成本很高&#xff0c;需要了解和熟练掌握分布式系统。为了使用所有开发人员能够使用任何语言和任何框架轻松…

.NET Core on K8S 学习与实践系列文章索引 (更新至20191116)

更新记录&#xff1a;-- 2019-11-16 增加Docker容器监控系列文章// 此外&#xff0c;今天是11月17日&#xff0c;我又老了一岁&#xff0c;祝我自己生日快乐&#xff01;近期在学习Kubernetes&#xff0c;基于之前做笔记的习惯&#xff0c;已经写了一部分文章&#xff0c;因此给…