我想将一个二维数组导出为包含List<DataSet>
中数据块的Excel。
如果我将每个DataSet
的数据集拆分为5000行,每个DataSet
包含66个字段,我最终会在单个{{1}中找到60多个WorkSheets
}。
我理想的是能够将WorkBook
对象中每个Table
的数据附加到单个List<DataSet>
。
如果可能的话,我需要一些帮助才能找到解决方案。使用包含该大小矩阵的单个WorkSheet
分配Excel.Range
会导致DataSet
。
以下是我目前将System.OutOfMemoryException
拆分成块的方式:
DataTable
我这样称呼这个方法:
internal static class ExtensionMethods
{
internal static List<DataTable> SplitDataSetIntoMultipleTables(this DataTable tableToClone, int countLimit)
{
List<DataTable> tables = new List<DataTable>();
int sheetNumber = 0;
DataTable copyTable = null;
foreach (DataRow dr in tableToClone.Rows)
{
if ((count++ % countLimit) == 0)
{
sheetNumber++;
copyTable = new DataTable();
copyTable = tableToClone.Clone();
copyTable.TableName = "Table " + sheetNumber;
tables.Add(copyTable);
}
copyTable.ImportRow(dr);
}
return tables;
}
}
DataSetsToExcel 方法...请注意,这只是我在网上找到的很多方法中的一种......我稍微调整了一下:
dt = new DataTable();
dt = await Task.Run(() => logic.PopulateDataTable());
DataSet ds = new DataSet();
var lstTables = await Task.Run(() => ExtensionMethods.SplitDataSetIntoMultipleTables(dt, 5000));
List<DataSet> dsList = new List<DataSet>();
for (int i = 0; i < ds.Tables.Count; i++)
{
dsList.Add(ds);
}
await Task.Run(() => DataSetsToExcel(dsList, @"C:\Users\me\Desktop\OutputSpreadsheet_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx"));