1

ワークシートに大量のデータを挿入できません。エラーは「プログラムの実行を続行するにはメモリが不足しています」です。私はExcel2007を使用しています。私の配列には393210行と29列があります。まず、1つの操作(範囲=(オブジェクト)配列)を使用して挿入しようとしました。その後、配列をいくつかの部分に分割しました。私のコード:

    // 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は、1回の操作中に挿入される行の最大数を設定します。数が283000未満の場合は、すべて問題ありません。しかし、それが283500を超えると、エラーが発生します。

ここで見つけたように、 「ワークシートのサイズは1,048,576行×16,384列」です。このエラーの理由は何ですか?

4

1 に答える 1

4

Excel 2007 は約 2GB のメモリに制限されています (32 ビット プログラムです) が、実際には、メモリの断片化の問題により、その制限に達する前にメモリが不足することがよくあります。
内部的に、Excel はスパース配列スキームを使用してワークシートで使用されているセルを追跡するため、公開されている 1,048,576 行と 16,384 列の制限は正しいですが、2 GB の制限を超えずにこれらのセルをすべて使用することはできません (1000 以上が必要になります)。 GB)。
Excel 2010 および 2013 の 64 ビット バージョンには、はるかに大きなメモリ制限があります。Excel バージョンによるメモリ制限の詳細については、http://www.decisionmodels.com/memlimitsc.htm
を参照してください。

于 2013-01-15T10:24:30.083 に答える