zoukankan      html  css  js  c++  java
  • 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,这里贴几张图:

    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.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 都欢迎

  • 相关阅读:
    制作本地 odoo deb包安装镜像
    用Lua实现string的trim()方法
    UGUI之控件以及按钮的监听事件系统
    UGUI之不规则按钮的响应区域
    Unity接第三方SDK时遇到的坑
    AI设计
    Unity UGUI 的RectTransform参数的设置
    Lua string库详解
    lua正则表达式如何匹配中文
    kubernetes pod的生命周期
  • 原文地址:https://www.cnblogs.com/weihanli/p/11839133.html
Copyright © 2011-2022 走看看