加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

WeihanLi.Npoi 1.13.0 更新日志

发布时间:2020-12-16 08:46:35 所属栏目:asp.Net 来源:网络整理
导读:WeihanLi.Npoi 1.13.0 更新日志 Intro 在 Github 上收到 Issue 收到网友反馈希望支持自动分 Sheet 导出,有兴趣的可以参考 Issue https://github.com/WeihanLi/WeihanLi.Npoi/issues/94 从我个人角度来说,我觉得如果要导出很大批量的数据,可以导出 csv 文

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,2)]
public void DataTableAutoSplitSheetsTest(ExcelFormat excelFormat,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,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

  • https://github.com/WeihanLi/WeihanLi.Npoi/issues/94
  • https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/test/WeihanLi.Npoi.Test/ExcelTest.cs#L625
  • https://github.com/WeihanLi/WeihanLi.Npoi/pull/96
  • https://weihanli.github.io/WeihanLi.Npoi/docs/api/WeihanLi.Npoi.NpoiExtensions.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读