C# Interop 循环遍历从范围接收的值
C# Interop loop through values received from a range
如何遍历从指定范围返回的值?
我尝试了以下代码,但它 returns:
Cannot apply indexing with [] to an expression of type '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];
}
它是一个系统数组而不是 'normal array'(基于错误)。所以你应该可以使用 var test = wsValues.GetValue(1, j);
注意这将 return 一个对象。所以你必须对你期望的类型进行转换。
另请注意,这种情况下的 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 命令中 returns 是该维度的长度,因此第一个 returns 是多少 'columns' 或最大 x 值的长度,第二个 returns 最大 y 值或有多少行。
如何遍历从指定范围返回的值?
我尝试了以下代码,但它 returns:
Cannot apply indexing with [] to an expression of type '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];
}
它是一个系统数组而不是 'normal array'(基于错误)。所以你应该可以使用 var test = wsValues.GetValue(1, j);
注意这将 return 一个对象。所以你必须对你期望的类型进行转换。
另请注意,这种情况下的 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 命令中 returns 是该维度的长度,因此第一个 returns 是多少 'columns' 或最大 x 值的长度,第二个 returns 最大 y 值或有多少行。