-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

不要将 foreach 与 COM 集合一起使用;在内部,它创建一个 COM 对象。请改用 for 循环。

弗拉基米尔,formulaCells包含多个区域(Range.Areas),每个区域都是一个Excel.Range类型的矩形。所以你需要走遍所有区域,穿过每个区域的每个单元格。

于 2012-05-10T11:09:36.467 回答