在空单元格之前停止循环

时间:2014-05-21 20:44:53

标签: excel loops powershell

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

2 个答案:

答案 0 :(得分:1)

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

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

现在$Data是一个包含B列中所有已使用单元格的数组。想要C列吗?将其更改为-Skip 2。或者,如果您想要A列,则只需完全删除-Skip。获得数据后,您可以将其输出到屏幕,根据需要进行解析,将其保存到文件或任何您想要的内容。

答案 1 :(得分:0)

你可以做一个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++
}

这是否适用于您的目的?