在空单元之前停止循环

for ($i = 1; $i -le $somenumberofusedcellsinthecolumn; $i++) { $cell = $ws.Cells.Item($i, 1) $value = $cell.Value2 -as [string] write-host $value } 

我希望我的for循环在列中的下一个单元格为空时终止。 我不知道如何设置循环的终点,因为人们可以添加更多的数据到Excel表格。

我在网上看到一些人已经使用以下作为循环的终点,但我不知道如何实现它。

  $rows = $ws.range("c2").currentregion.rows.count 

虽然我们可以循环遍历单元格来检查下一个单元格的值,而不是,我认为更好地服务于您的目的是直接从列中获取值并将其存储在数组中。 我们假设您对列B中的数据感兴趣。我们将select工作表的Columns属性,跳过1列,然后select第一列(跳过A,并从B中获取值)。 然后,我们展开Value2,它已经是该列中所有已用单元格的数组的数组,并且为您提供所有您要查找的数据。 尝试一下,看看你喜欢它:

 $Data = $ws.Columns | Select -Skip 1 -First 1 | Select -Expand Value2 

现在$Data是一个数组,包含了列B中所有使用的单元格。 将其更改为-Skip 2 。 或者如果你想要列A,你只需删除-Skip完全。 一旦你有你的数据,你可以输出到屏幕上,根据需要parsing,保存到一个文件,或任何你想要的。

你可以做一个while循环,一旦到达一个空单元格就退出。

 $i=1 $nextValue = $true while ($nextValue -eq $true) { $cell = $ws.Cells.Item($i, 1) $value = $cell.Value2 -as [string] write-host $value if ($ws.Cells.Item($i+1, 1).Value() -eq $Null) { $nextValue = $false } $i++ } 

这是否适合你的目的?