2020年11月21日星期六

WeihanLi.Npoi 1.13.0 更新日志

WeihanLi.Npoi 1.13.0 Released

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

  • 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








原文转载:http://www.shaoqun.com/a/492725.html

贝恩:https://www.ikjzd.com/w/1336

DMM:https://www.ikjzd.com/w/2026

c-tick认证:https://www.ikjzd.com/w/2074


WeihanLi.Npoi1.13.0ReleasedWeihanLi.Npoi1.13.0更新日志Intro在Github上收到Issue收到网友反馈希望支持自动分Sheet导出,有兴趣的可以参考Issuehttps://github.com/WeihanLi/WeihanLi.Npoi/issues/94从我个人角度来说,我觉得如果要导出很大批量的数据,可以导出csv文件,没有必要非得导出Ex
reverb:reverb
美森:美森
深圳万圣节哪里有活动?深圳万圣节去哪玩?:深圳万圣节哪里有活动?深圳万圣节去哪玩?
亚马逊新推Fire平板智能家居控制功能:亚马逊新推Fire平板智能家居控制功能
武汉 一碗热干面吃出幸福的感觉 - :武汉 一碗热干面吃出幸福的感觉 -

没有评论:

发表评论