我有一个名为rng的excel.range。我使用foreach循环遍历它。
foreach(Excel.Range cell in rng)
{
//do something
}
foreach循环在我的应用程序中非常有用,我不能使用for循环。现在问我的问题:
有没有办法移动到相对于当前单元格的i:th单元格?并从该单元格继续我的foreach循环。像这样:
foreach(Excel.Range cell in rng)
{
If(cell.value.ToString() == "Something")
//move 3 cells forward in rng relative to the current cell
}
我不是在寻找继续;表达。我需要以某种方式在我的范围内前进。我是怎么做的不那么重要。它可以是使用某种moveNext()命令或某种索引的循环。
我感谢任何帮助!
答案 0 :(得分:1)
要回答你的问题,不,没有办法在foreach
循环中“跳过”任意数量的项目。无法使用for
循环是一个奇怪的要求,所以我想知道这是一个谜题,而不是一个真正的问题。但我离题了......
请记住,每次访问C#中的Excel属性都是一个COM调用,因此非常昂贵。通过将整个范围拉入数组,您将获得更好的性能(并使编程更容易):
object[,] data = rng.Value2 as object[,];
数组将包含字符串(用于文本单元格)和双精度数字(用于数字/日期单元格)。那么你可以使用标准循环来导航数组。当你完成后,只需将数据放回去:
rng.Value2 = data;
答案 1 :(得分:0)
看看你的问题,似乎你需要回答"如何引用相邻的细胞?"
为此,您可以在excel vba中使用Offset()属性。
它的工作方式如下:假设您指的是行号。列A中的1个。现在您要引用相同的行但列D;你可以使用:
范围(" Your_Range")。偏移(0,3)。选择
有关OFFSET功能的更多信息: https://msdn.microsoft.com/en-us/library/office/ff840060.aspx?f=255&MSPPError=-2147217396
答案 2 :(得分:0)
如果您只想跳过foreach,在这种情况下,您可以执行以下操作:
int i = 0;
foreach(Excel.Range cell in rng)
{
if(i>0)
{
i--;
}
else
{
if(cell.value.ToString() == "Something")
i=3;
}
表示你已经"跳过" foreach,但仍然尝试使用for循环,它会比这个简单得多。