如何在 C# 中使用索引迭代 Excel.Range
How to iterate on Excel.Range with an index in c#
我正在为 excel 编写一个 c# 插件,它从 excel sheet 的列中获取值并执行一些操作。这是我写的代码的一部分:
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
作为向量,但是有什么方法可以使用索引来滚动 aqRange
和 vcRange
或者,至少,如果可以只使用一个 for
或一个 foreach
而不是两个(就像我所做的那样)。
您可以使用范围的 Cells 属性 有点像二维数组。
重要的是要注意,尽管使用的语法类似于 C# 二维数组 (Cells[RowIndex, ColIndex]),但 Cells 属性 访问使用 1 作为起始偏移量的 COM 对象,而不是 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 Rows & How do I get an Excel range using row and column numbers in VSTO / C#?
我正在为 excel 编写一个 c# 插件,它从 excel sheet 的列中获取值并执行一些操作。这是我写的代码的一部分:
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
作为向量,但是有什么方法可以使用索引来滚动 aqRange
和 vcRange
或者,至少,如果可以只使用一个 for
或一个 foreach
而不是两个(就像我所做的那样)。
您可以使用范围的 Cells 属性 有点像二维数组。
重要的是要注意,尽管使用的语法类似于 C# 二维数组 (Cells[RowIndex, ColIndex]),但 Cells 属性 访问使用 1 作为起始偏移量的 COM 对象,而不是 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 Rows & How do I get an Excel range using row and column numbers in VSTO / C#?