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,是以想了一下還是加一下這個功能吧,目前支援
List
或
DataTable
直接導出 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
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。