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

我希望我的for循環在列中的下一個單元格爲空時終止。我不知道如何設置循環的終點,因爲人們可以將更多的數據添加到Excel表格中。在空單元格之前停止循環

我在網上看到有些人使用以下作爲循環的終點,但我不知道如何實現它。

​​
+0

對不起,你想循環所有使用過的單元嗎?或者只是某個部分(如A2:D40或其他),並停在最後使用的單元格? – TheMadTechnician

+0

@TheMadTechnician對不起,是的,基本上只是循環使用了一列已使用過的單元格並計算了有多少,這樣我就可以阻止我的循環。 – krousemw

回答

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。獲得數據後,您可以將其輸出到屏幕,根據需要進行解析,將其保存到文件或任何您想要的內容。

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++ 
} 

這是否適合您的用途?