无法在工作表中插入大量数据

时间:2013-01-15 08:06:54

标签: c# excel

我无法在工作表中插入大量数据。 错误是“内存不足以继续执行程序”。 我正在使用Excel 2007.我的阵列有393210行和29列。 首先,我尝试使用一个操作(Range =(object)array)插入它。 之后我将数组分成几个部分。 我的代码:

    // Fill content
const int row_limit = 283500;
int row_start = 0;
int row_end;

int number_of_iterations = (int)Math.Ceiling((double)dtable.Rows.Count / (double)row_limit);

for (int idx = 0; idx < number_of_iterations; idx++)
{
    if (idx == number_of_iterations - 1)
        row_end = dtable.Rows.Count - 1;
    else
        row_end = row_start + row_limit - 1;

    object[,] arr = new object[row_end - row_start + 1, dtable.Columns.Count];
    int arr_row = 0;

    for (int r = row_start; r <= row_end; r++)
    {
        for (int c = 0; c < dtable.Columns.Count; c++)
        {
            arr[arr_row, c] = dtable.Rows[r][c];
        }
        arr_row++;
    }

    ((Excel.Range)ex_sheet.get_Range((Excel.Range)ex_sheet.Cells[row_start + 2, 1], (Excel.Range)ex_sheet.Cells[row_end + 2, dtable.Columns.Count])).Value = arr;

    row_start = row_end + 1;
}

常量row_limit设置一次操作期间插入的最大行数。如果数量小于283000,一切都可以。但如果它超过283500我就会收到错误。

我发现here“工作表大小1,048,576行16,384列”。 这个错误的原因是什么?

1 个答案:

答案 0 :(得分:3)

Excel 2007仅限于大约2GB内存(它是一个32位程序),但实际上由于内存碎片问题,它在达到该限制之前通常会耗尽内存。
内部Excel使用稀疏数组方案来跟踪工作表中使用的单元格,因此尽管已发布的1,048,576行和16,384列的限制是正确的,但是不能在不超过2GB限制的情况下使用所有这些单元格(您需要超过1000 GB)。
64位版本的Excel 2010和2013具有更大的内存限制。
有关Excel版本的内存限制的详细信息,请参阅http://www.decisionmodels.com/memlimitsc.htm