zoukankan      html  css  js  c++  java
  • WeihanLi.Npoi 1.13.0 更新日志

    WeihanLi.Npoi 1.13.0 更新日志

    Intro

    在 Github 上收到 Issue 收到网友反馈希望支持自动分 Sheet 导出,有兴趣的可以参考 Issue https://github.com/WeihanLi/WeihanLi.Npoi/issues/94

    从我个人角度来说,我觉得如果要导出很大批量的数据,可以导出 csv 文件,没有必要非得导出 Excel 文件,毕竟现在机器学习数据训练等很多都是用的 csv,而且 csv 的格式简单,更方便导出,导出性能会Excel更好更高效。

    不过有些场景可能必须要用 Excel,所以想了一下还是加一下这个功能吧,目前支持 ListDataTable 直接导出 Excel

    使用示例

    使用起来比较简单,和之前的使用并没有什么不同,可以参考下面的单元测试:

    List 自动分 Sheet 导出:

    [Theory]
    [InlineData(ExcelFormat.Xls, 1000, 1)]
    [InlineData(ExcelFormat.Xls, 65536, 2)]
    [InlineData(ExcelFormat.Xls, 132_000, 3)]
    //[InlineData(ExcelFormat.Xls, 1_000_000, 16)]
    //[InlineData(ExcelFormat.Xlsx, 1_048_576, 2)]
    public void EntityListAutoSplitSheetsTest(ExcelFormat excelFormat, int rowsCount, int expectedSheetCount)
    {
        var list = Enumerable.Range(1, rowsCount)
            .Select(x => new Notice()
            {
                Id = x,
                Content = $"content_{x}",
                Title = $"title_{x}",
                Publisher = $"publisher_{x}"
            })
            .ToArray();
    
        var bytes = list.ToExcelBytes(excelFormat);
        var workbook = ExcelHelper.LoadExcel(bytes, excelFormat);
        Assert.Equal(expectedSheetCount, workbook.NumberOfSheets);
    }
    

    DataTable 自动分 Sheet 导出:

    
    [Theory]
    [InlineData(ExcelFormat.Xls, 1000, 1)]
    [InlineData(ExcelFormat.Xls, 65536, 2)]
    [InlineData(ExcelFormat.Xls, 132_000, 3)]
    //[InlineData(ExcelFormat.Xls, 1_000_000, 16)]
    //[InlineData(ExcelFormat.Xlsx, 1_048_576, 2)]
    public void DataTableAutoSplitSheetsTest(ExcelFormat excelFormat, int rowsCount, int expectedSheetCount)
    {
        var dataTable = new DataTable();
        dataTable.Columns.Add(new DataColumn("Id", typeof(int)));
        for (var i = 0; i < rowsCount; i++)
        {
            var row = dataTable.NewRow();
            row.ItemArray = new object[]
            {
                i+1
            };
            dataTable.Rows.Add(row);
        }
        Assert.Equal(rowsCount, dataTable.Rows.Count);
        var bytes = dataTable.ToExcelBytes(excelFormat);
        var workbook = ExcelHelper.LoadExcel(bytes, excelFormat);
        Assert.Equal(expectedSheetCount, workbook.NumberOfSheets);
    }
    

    More

    除了上面的示例,还提供了两个扩展方法 GetWorkbookWithAutoSplitSheet<TEntity>(this IList<TEntity> entityList, ExcelFormat excelFormat)/GetWorkbookWithAutoSplitSheet(this DataTable dataTable, ExcelFormat excelFormat, ExcelSetting excelSetting = null) 来获取自动分 Sheet 之后的 IWorkbook,进行进一步的自定义操作。

    其他的操作方式和之前完全一样,可以直接导出文件,字节数组,或者写入到指定 Stream 里

    void ToExcelFile<TEntity>(this IList<TEntity> entityList, string excelPath);
    
    byte[] ToExcelBytes<TEntity>(this IList<TEntity> entityList, ExcelFormat excelFormat = ExcelFormat.Xls);
    
    void ToExcelStream<TEntity>(this IList<TEntity> entityList, Stream stream, ExcelFormat excelFormat = ExcelFormat.Xls);
    

    详细变更可以参考 PR: https://github.com/WeihanLi/WeihanLi.Npoi/pull/96/files

    Reference

  • 相关阅读:
    Struts2笔记——ONGL表达式语言
    Struts2笔记——自定义拦截器
    Struts2笔记——Action校验器
    Struts2笔记——文件上传
    Struts2笔记——与ServletAPI解耦
    Struts2笔记——通配符和动态方法调用
    Struts2笔记——类型转换
    Struts2笔记——result结果类型
    MongoDB相关资料
    公开数据集
  • 原文地址:https://www.cnblogs.com/weihanli/p/14015114.html
Copyright © 2011-2022 走看看