我有这样的情况:
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()将行索引作为参数,因此它将遍历没有公式的单元格。我无法迭代它。 我该怎么做?
答案 0 :(得分:2)
不要将foreach与COM集合一起使用;在内部,它创建一个COM对象。请改用for循环。
Vladimir, formulaCells 包含多个区域(Range.Areas),每个区域都是Excel.Range类型的矩形。因此,您需要遍历所有区域并遍历每个区域的每个单元格。