将数据块导出到Excel

时间:2016-07-08 12:50:25

标签: c# excel multithreading multidimensional-array

我想将一个二维数组导出为包含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"));

0 个答案:

没有答案