如何在C#中使用索引对Excel.Range进行迭代

时间:2019-03-04 10:11:51

标签: c# .net excel vsto

我正在为Excel编写一个c#Add in,它从Excel工作表的列中获取值并执行一些操作。这是我编写的代码的一部分:

        Excel.Range aqRange = currentSheet.Range["C3:C" + cRowCount];
        Excel.Range vcRange = currentSheet.Range["D3:D" + cRowCount];
        Excel.Range k0R = currentSheet.Range["F2"];
        double[] sgVett = new double[cRowCount];

        foreach (Range aq in aqRange)
        {
            if (i == 0) sgVett[i] = k0R.Value + aq.Value;
            else sgVett[i] = sgVett[i - 1] + aq.Value;
            i++;
        }
        i = 0;

        foreach (Range vc in vcRange)
        {
            if (i == 0) sgVett[i] -= vc.Value;
            else sgVett[i] -= vc.Value;
            i++;
        }

我想知道是否有某种方法可以执行以下操作:

for(int j = 0; j<cRowCount; j++) {
    if (i == 0) sgVett[i] = k0R.Value + aqRange[i].Value;
    else sgVett[i] = sgVett[i - 1] + aqRange[i].Value;
}

我知道我不能使用Excel.Range作为向量,但是有某种方法可以使用索引来滚动aqRangevcRange,或者至少滚动可以只使用一个for或一个foreach而不是两个(就像我一样)。

1 个答案:

答案 0 :(得分:0)

您可以像使用二维数组一样使用Range的Cells属性。

重要的是要注意,尽管使用的语法类似于C#2D数组(Cells [RowIndex,ColIndex]),但是Cells属性访问的COM对象使用1作为起始偏移量,而不是0。

因此,您应该可以编写如下内容:

for(int j = 1; j<=cRowCount; j++)
{
    if (i == 0) sgVett[i] = k0R.Value + aqRange.Cells[j,1].Value;
}

另请参见:Fastest way to get an Excel Range of RowsHow do I get an Excel range using row and column numbers in VSTO / C#?