C#Interop循环遍历从范围接收的值

时间:2017-03-09 10:58:19

标签: c# interop

如何遍历从指定范围返回的值?

我尝试了以下代码,但它返回:

  

无法将带有[]的索引应用于类型为' System.Array'

的表达式
var rng = (Excel.Range)sheet.Range[sheet.Cells[3, 2], sheet.Cells[3, 27]];
var wsValues = rng.Cells.Value;
for (var j = 0; j < wsValues.Length; j++)
{
    var test = wsValues[j];
}

enter image description here

1 个答案:

答案 0 :(得分:1)

它的系统数组不是'普通数组'(基于错误)。所以你应该可以使用var test = wsValues.GetValue(1, j);注意这将返回一个对象。所以你必须按照预期的类型进行演员表。

另请注意,在这种情况下,1是因为所有测试数据都是1作为多维数组中的第一个值。您可以将多维数组视为网格,使用x坐标和y坐标,因此如果您想要正确迭代它们(就好像您正在使用多个列而不是仅使用一个列)。然后你会这样做:

for (var x = 1; x <= wsValues.GetLength(0); x++)
{
    for (var y = 1; y <= wsValues.GetLength(1); y++)
    {
        var test = wsValues[x, y];
    }
}

在此,GetLength命令返回该维度的长度,因此第一个返回“列”或最大x值的长度,第二个返回最大y值或那里有多少行是