C#からExcelシートへの書き込み方法はリンク先をご参照頂くことで、ここでは割愛します。
レスポンスの遅い方法
上記リンク先では、基本的な処理方法を説明するためレスポンスの遅い方で記載しました。どの部分が遅いかというと、下記の直接Excelに書き込む部分です。やはりI/Oの処理はボトルネックとなりやすいので、その量を減らす事がレスポンス向上のカギとなります。
/* Excelセルへの書き込み */
for (int i = 1; i <= LineX; i++)
{
for (int j = 1; j <= LineY; j++)
{
ExcelWS.Cells[i, j] = i + j - 1;
}
}
for (int i = 1; i <= LineX; i++)
{
for (int j = 1; j <= LineY; j++)
{
ExcelWS.Cells[i, j] = i + j - 1;
}
}
レスポンスの早い方法
上記の箇所を下記のように書き換えることで、非常にレスポンスの向上が図れます。
/* ExcelDataというオブジェクトを作成する */
object[,] ExcelData;
/* ExcelDataのX、Yの配列を設定する */
ExcelData = new object[LineX + 1, LineY + 1];
for (int i = 1; i <= LineX; i++)
{
for (int j = 1; j <= LineY; j++)
{
/* ExcelDataオブジェクト変数にセット */
ExcelData[i - 1, j - 1] = i + j - 1;
}
}
/* Range変数を作成する */
Range rgn;
/* Excelの書き込む範囲を設定する(Cellの指定は(x,y)=(1,1)から開始に注意) */
rgn = ExcelWS.Range[ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX + 1, LineY + 1]];
/* Excelに書き込む */
rgn.Value = ExcelData;
object[,] ExcelData;
/* ExcelDataのX、Yの配列を設定する */
ExcelData = new object[LineX + 1, LineY + 1];
for (int i = 1; i <= LineX; i++)
{
for (int j = 1; j <= LineY; j++)
{
/* ExcelDataオブジェクト変数にセット */
ExcelData[i - 1, j - 1] = i + j - 1;
}
}
/* Range変数を作成する */
Range rgn;
/* Excelの書き込む範囲を設定する(Cellの指定は(x,y)=(1,1)から開始に注意) */
rgn = ExcelWS.Range[ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX + 1, LineY + 1]];
/* Excelに書き込む */
rgn.Value = ExcelData;