WeihanLi.Npoi 近期更新

摘要:
李伟汉。Npoi最近的更新Intro最近对我的Npoi扩展做了一些更改。一方面,它提高了性能,另一方面,修复了错误并添加了一些新功能,使其更易于使用。几天前,1.5.0版本发布。以下是最新更新如何更改1.5.0版本中的默认导入/导出格式。它将默认导入/输出excel格式从xlsx更改为xls以获得更好的性能。需要注意的是,在xls格式的excel文件中最多可以找到65535行数据。如果数字超过限制,将报告错误。
WeihanLi.Npoi 近期更新

Intro

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

默认导入/导出格式变更

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

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

Basic Test

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

Import Test

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.ToEntityListStream/byte[] 的重载,使得用户可以直接从上传的文件流或者一个字节数组中获取 excel 内容
  • 增加了 CsvHelper.ToEntityList(byte[] bytes)/CsvHelper.ToEntityList(Stream stream)
  • 导出 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 都欢迎

免责声明:文章转载自《WeihanLi.Npoi 近期更新》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇图像检索(image retrieval)- 10还在用分库分表?看TiDB如何解决海量数据无感扩容难题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决双击excel文件打开多个excel.exe进程的问题

解决双击excel文件打开多个excel.exe进程的问题有些时候,双击两个excel文件,会打开多个excel进程,不同进程之间不能复制粘贴公式,只能粘贴数值,很不方便。怎么样双击多个excel文件只打开一个excel进程呢?1.使用快捷键组合“Win+R”调出运行命令框,键入 regedit.exe,回车,打开注册表编辑器。2.修改HKEY_CLASS...

解决SharePoint2010中Excel刷新出错的问题

报歉手头上没有中文版的Office和SharePoint,不过看截图是可以对应过来的。 Excel中有一个很强大的功能是PivotTable,用它可以分析数据并展示在工作薄中。创建一个PivotTable的方法很简单,创建一个连接,指到相应的数据库就可以了。 当PivotTable创建完成后,在Excel点击Data下面的Refresh All,就可以刷新...

把sql server 数据库中数据导出至excel表

https://blog.csdn.net/weixin_42596182/article/details/90750187 打开数据库后选择需要导出数据的数据库,比如本次为db_PMMS,右键选择“任务”–“导出数据”,点击下一步。 进入“选择数据源”窗口。“数据源”选择sql server native client 10.0,然后选择服务器和数据...

VS2008环境下C#对Excel的操作 [C#] (收集转载)

开发环境: Windows XP Microsoft Visual Studio 2008 Office 2003 最近开发从数据库导出数据到Excel的功能,需要在C#中执行对Excel的操作。在网上搜索到这类的资料很多,但实际用到自己的代码里总不那么尽如人意。经过多次试验,终于能按照自己理想中的方式执行完毕。现补充自己在实践中遇到的情况以供参考。示例如...

SQLServer导入Excel,复杂操作

导入Excel 先导入的时候报错了, 提示未在本地计算机上注册“Microsoft.ACE.Oledb.12.0”提供程序。(System.Data),去网址下个软件安装就搞定了,有64位和32位的 在数据库点击右键->任务->导入数据 于是出来了导入和导出向导,首先选择数据源,我选的是Microsoft Excel,然后导入Excel文件,点...

EasyPoi使用入门

咱们在开发的时候,总会遇到需要通过代码操作办公软件的情况,而excel与word的操作最为频繁。 当然我们Java程序员可以选择JXL或者POI来完成相应的Excel操作,但是大家用过都知道,有些地方感觉还是不够简单,不那么尽如人意。 今天给大家介绍一个EasyPoi,就算我们不会底层的POI,也可以非常轻松的完成Excel的操作。EasyPoi,主打简单...