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

导出数据较多,截图难以完整展示,建议看 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 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 都欢迎

WeihanLi.Npoi 近期更新相关推荐

  1. WeihanLi.Npoi 1.10.0 更新日志

    WeihanLi.Npoi 1.10.0 更新日志 Intro 上周有个网友希望能够导入Excel时提供一个 EndRowIndex 来自己控制结束行和根据字段过滤的功能,周末找时间做了一下这个 fe ...

  2. WeihanLi.Npoi 1.7.0 更新介绍

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

  3. WeihanLi.Npoi 1.21.0 Released

    WeihanLi.Npoi 1.21.0 Released Intro WeihanLi.Npoi 是一个基于 netstandard2.0 的一个 NPOI 扩展库,主要用于导入导出 Excel 以 ...

  4. WeihanLi.Npoi 1.20.0 Released

    WeihanLi.Npoi 1.20.0 Released Intro WeihanLi.Npoi 是一个基于 netstandard2.0 的一个 NPOI 扩展库,主要用于导入导出 Excel 以 ...

  5. WeihanLi.Npoi 1.18.0 Released

    WeihanLi.Npoi 1.18.0 Released Intro 前段时间一直在想,把现在的配置做成类似于 AutoMapper 和 FluentValidation 那样,把每个类型的 map ...

  6. ​WeihanLi.Npoi 根据模板导出Excel

    WeihanLi.Npoi 根据模板导出Excel Intro 原来的导出方式比较适用于比较简单的导出,每一条数据在一行,数据列虽然自定义程度比较高,如果要一条数据对应多行就做不到了,于是就想支持根据 ...

  7. WeihanLi.Npoi 支持 ShadowProperty 了

    WeihanLi.Npoi 支持 ShadowProperty 了 Intro 在 EF 里有个 ShadowProperty (阴影属性/影子属性)的概念,你可以通过 FluentAPI 的方式来定 ...

  8. WeihanLi.Npoi 导出支持自定义列内容啦

    WeihanLi.Npoi 导出支持自定义列内容啦 Intro 之前也有网友给提出过希望列合并或者自定义列内容的 issue 或请求,起初因为自己做 WeihanLi.Npoi 这个扩展的最初目的是导 ...

  9. 使用 WeihanLi.Npoi 操作 CSV

    Intro 最近发现 csv 文件在很多情况下都在使用,而且经过大致了解,csv 格式简单,相比 excel 文件要小很多,读取也很是方便,而且也很通用,微软的 ml.net 的示例项目 用来训练模型 ...

最新文章

  1. Android 个人学习笔记- 导入android项目,无法自动生成R文件的解决方法
  2. 数据结构思维 第六章 树的遍历
  3. RabbitMQ指南(中)
  4. IIs管理服务一直启动失败的原因之一
  5. html页面通过特殊链接:打电话,发短信,发邮件详细教程
  6. Spring精华问答 | 什么是Spring Cloud?
  7. OGRE粒子系统简介
  8. [渝粤教育] 泉州师范学院 弦管传奇 古乐南音 参考 资料
  9. 韩顺平java30天Utils包下的工具类
  10. oracle模糊查询用法
  11. 修复win7便签功能
  12. Oracle查询优化
  13. 服务器系统怎么添加网络打印机,如何添加网络打印机
  14. 计算机里电子 邮件格式,邮箱格式怎么写?
  15. Mac 活动监视器 闪退 打不开
  16. 黑客全票打飞服务器,《鹅鸭杀》停服三天!更有游戏首发被冲下架
  17. 第二届邯郸钢铁展洽会 | 图扑软件荣获“2022钢铁行业智造之星奖”
  18. 学习手册--没必要装模做样,只有你自己最清楚
  19. 高斯混合模型(Gaussian Mixture Model,GMM)
  20. 手动搭建 React 项目

热门文章

  1. WCF发布到IIS7问题的解决方案
  2. 主动给团队或用户安装Teams App
  3. ios beta 下载_如何回滚到iOS 10(如果您使用的是iOS 11 Beta)
  4. 什么是Google On.Here,以及如何设置?
  5. python之路day10-命名空间和作用域、函数嵌套,作用域链、闭包
  6. MySQL设置从库只读模式
  7. 阿里云MaxCompute香港开服 将引入更多人工智能服务
  8. bzoj3224 Tyvj 1728 普通平衡树题解--Treap
  9. 大数据先行 传统金融转型需从体制上创新
  10. 7 种 JavaScript 技巧使你更聪明