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

  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/weihanli/p/14015114.html
Copyright © 2011-2022 走看看