1

我无法将大量数据插入工作表。错误是“内存不足,无法继续执行程序”。我正在使用 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,我会收到错误消息。

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

4

1 回答 1

4

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

于 2013-01-15T10:24:30.083 回答