-1

次のような状況があります。

Range formulaCells = range.SpecialCells(XlCellType.xlCellTypeFormulas);

そして、それらすべてを繰り返し処理したいと思います。しかし問題は、特定のセルの範囲オブジェクトが解放されないため、foreach ループでメモリ リークが発生することです。私は次のような従来の for ループでそれをやろうとしています:

for(int i = 1; i <= formulaCells.Count; i++)
{
  Range cell = null;
  try
  {
    cell = formulaCells.get_Item(i);
    // do some work
  }
  catch(Exception e) {throw e;}
  finally
  {
    If(cell != null)
    {
      Marshal.ReleaseCOMObject(cell);
      cell = null;
    }
  }
}

ただし、get_Item() は行インデックスをパラメーターとして受け取るため、数式を持たないセルを通過します。私はそれを繰り返すことはできません。どうすればいいですか?

4

1 に答える 1

2

COM コレクションで foreach を使用しないでください。内部的には、COM オブジェクトを作成します。代わりに for ループを使用してください。

Vladimir、formulaCellsには複数の領域 (Range.Areas) が含まれており、各領域は Excel.Range タイプの四角形です。したがって、すべてのエリアを通り抜け、各エリアのすべてのセルを通り抜ける必要があります。

于 2012-05-10T11:09:36.467 に答える