WeihanLi.Npoi 近期更新

Intro

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

默认导入/导出格式变更

在 1.5.0 版本中,将默认导入/导出的excel格式从 xlsx 改为 xls 以获得更好的性能,需要注意的是 xls 格式的 excel 文件一个 sheet 最多 65535 行数据,超过的话会报错。

xls 可以有更好的性能和更优的内存分配,xlsx 可能是因为要和 xlsx 保持一致的接口,一致的编程体验才会性能有点问题,建议最好使用 xls 格式的 excel

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

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

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 Stream/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 都欢迎

最新文章

  1. Android XML中引用自定义内部类view的四个why
  2. ORACLE 导出(exp) &amp; 导入(imp)
  3. jQuery超炫酷按钮插件及源码
  4. less-2
  5. PHP初学留神(二)
  6. C++四种强制类型转换详解
  7. ifconfig 源码
  8. hdu 4912 Paths on the tree(树链拆分+贪婪)
  9. 深入理解Linux内核 学习笔记(1)
  10. java基础 第七章课后习题
  11. Trident的过滤操作
  12. SpringBoot2.0集成FastDFS
  13. wine和cygwin安装使用教程
  14. Redis:五种数据类型的简单增删改查
  15. MVC学习(四)几种分页的实现(1)
  16. Linux解决安装包无法找到问题Unable to locate package rar
  17. mysql中查看视图的元数据?
  18. python 元组中元组转为字典
  19. 函数的类型:函数也是类型 (*)-&gt;*
  20. mac 终端 使用 gnu coreutils 工具 ls 颜色显示

热门文章

  1. 电信资源管理系统:基于 H5 叠加 OpenLayers3 GIS
  2. vue-hash-calendar,移动端日期时间选择插件
  3. 02 Pycharm的安装
  4. pycharm 2019/10 激活码 最新福利 (1)
  5. Java8 Period.between方法坑及注意事项
  6. ‎Cocos2d-x 学习笔记(20) ControlButton
  7. React Diff算法一览
  8. GDAL集成对KML文件的支持
  9. Halcon C# 联合编程问题(三)
  10. JavaScript中valueOf、toString的隐式调用