1

Excel 相互運用機能を使用して、クエリ結果から Excel ワークブックを作成しています。何千ものレコードがある場合、ワークブックの生成に時間がかかります。以下のコードは、セルにデータを入力する方法のサンプルです。

RowNo = 1
For i = 1 To 4000
   ColNo = 1
   For j = 1 To 5
      Dim cell As excel.Range = ws.Cells(RowNo, ColNo)
      Dim value = j
      cell.Value = value
      ColNo = ColNo + 1
   Next
   RowNo = RowNo + 1
Next

上記のコードを実行するには、1 分以上かかります。どうすれば最適化できますか?

4

1 に答える 1

1

答えを見つけました。セルごとにデータを書き込むのではなく、配列にデータを書き込んでから、その配列を Excel の範囲に書き込むことができます。http://www.clear-lines.com/blog/post/Write-data-to-an-Excel-worksheet-with-C-fast.aspxを参照してください。

private static void WriteArray(int rows, int columns, Worksheet worksheet)
{
    var data = new object[rows, columns];
    for (var row = 1; row <= rows; row++)
    {
        for (var column = 1; column <= columns; column++)
        {
            data[row - 1, column - 1] = "Test";
        }
    }

    var startCell = (Range)worksheet.Cells[1, 1];
    var endCell = (Range)worksheet.Cells[rows, columns];
    var writeRange = worksheet.Range[startCell, endCell];

    writeRange.Value2 = data;
}
于 2012-10-05T12:48:16.037 に答える