1

ユーザーが指定した範囲のセルに対して変換を実行する VSTO DLL を作成しました。私は次の方法でこれをやっています:

Globals.ThisAddIn.Application.EnableEvents = false;

int totRows=inputRange.Rows.Count;
int totCols=inputRange.Columns.Count;

for (int i = 1; i <= totRows; i++) {
  for (int j = 1; j <= totCols; j++) {
    if (((Range)inputRange.Cells[i, j]).Value2 != null) {
      ((Range)outputSheet.Cells[i, j]).Value2 = MyTransform(((Range)inputRange.Cells[i, j]).Value2);
    }
  }
}

Globals.ThisAddIn.Application.EnableEvents = true;

この方法では、1 時間あたり約 150 万個のセルを変更できます (MyTransform() で消費される時間は数えていません)。これは非常に遅いように思えます。

VSTO でセルを読み書きするより効率的な方法はありますか?

そうでない場合、これを XLL に変換する (おそらく Excel-DNA を使用する) 方が速くなりますか? いくらか推測できますか?

4

1 に答える 1

4

読み取りおよび設定するすべてのセルに対して複数の COM 呼び出しを行っています。範囲全体を配列として一度に処理する方がはるかに効率的です。

この質問には、オプションに関する広範な議論があります:ライブ (保存されていない) Excel データと C# オブジェクトの間のインターフェイスへの最速の方法

Excel-DNAと Excel C API を使用すると、1 秒あたり 100 万個のセルを読み書きできますが、大きな配列として読み書きする場合、COM 経由でもパフォーマンスはかなり良いと思います。

于 2012-07-23T14:46:40.993 に答える