Excel 仅当使用powershell知道索引号时才更改一个单元格的值

Excel 仅当使用powershell知道索引号时才更改一个单元格的值,excel,powershell,scripting,powershell-2.0,Excel,Powershell,Scripting,Powershell 2.0,我有一个保存电话号码的CSV文件。根据号码的使用情况,号码的状态将为备用或已使用 每当我需要查找下一个可使用的备用号时,我都希望运行powershell脚本来查找下一个备用号,并将其分配给新用户(稍后实施),并将该特定号的值更改为已使用 $LineUri = @() $Status = @() $csv = Import-Csv C:\Users\user\Desktop\PhoneData.csv -Delimiter "," |` ForEach-Object {

我有一个保存电话号码的CSV文件。根据号码的使用情况,号码的状态将为备用或已使用

每当我需要查找下一个可使用的备用号时,我都希望运行powershell脚本来查找下一个备用号,并将其分配给新用户(稍后实施),并将该特定号的值更改为已使用

$LineUri = @()
$Status = @()

$csv = Import-Csv C:\Users\user\Desktop\PhoneData.csv -Delimiter "," |`
    ForEach-Object {
        $LineUri += $_.LineUri
        $Status += $_.Status
    }

$currentStatus = "Spare"

if ($Status -contains $currentStatus)
    {    
    $Where = [array]::IndexOf($Status, $currentStatus)
    $AvailableURI = $LineUri[$Where]

    Write-Host "Next Uri Available: " $LineUri[$Where]

    $changeWhere = [array]::IndexOf($LineUri, $AvailableURI)
    }
我已经使用下面的脚本找到了备用号码,但现在一旦找到了号码,我想将该号码的状态更改为已使用

$LineUri = @()
$Status = @()

$csv = Import-Csv C:\Users\user\Desktop\PhoneData.csv -Delimiter "," |`
    ForEach-Object {
        $LineUri += $_.LineUri
        $Status += $_.Status
    }

$currentStatus = "Spare"

if ($Status -contains $currentStatus)
    {    
    $Where = [array]::IndexOf($Status, $currentStatus)
    $AvailableURI = $LineUri[$Where]

    Write-Host "Next Uri Available: " $LineUri[$Where]

    $changeWhere = [array]::IndexOf($LineUri, $AvailableURI)
    }
我的CSV文件如下所示:

Name            LineUri Status
Test 1          3445660 Used
Test 2          3445663 Used
Test 3          3445664 Spare
Test 4          3445665 Used
Test 5          3445666 Spare
运行上述脚本后,它将返回“3445664”作为备用编号

现在我使用这个号码,我想将号码(3445664)的状态更改为已使用

一旦更新,CSV将如下所示

    Name            LineUri Status
    Test 1          3445660 Used
    Test 2          3445663 Used
    Test 3          3445664 Used
    Test 4          3445665 Used
    Test 5          3445666 Spare

具有良好powershell知识的人可以帮助我吗?

这将是第一次出现
备用状态到
已使用状态:

$csv = Import-Csv .\PhoneData.csv
$csv | % { if ( $_.status -eq 'Spare' ) { $_.status -eq 'Used' ; break } }
$csv | Export-Csv -Path .\PhoneDataNew.csv -NoTypeInformation
如果确实要使用索引,请执行以下操作:

$i = 0
$csv = Import-Csv .\PhoneData.csv
$csv | % { if ($_.status -eq 'Spare') { break } ; $i+=1 }
echo $i
> 2 

$csv[$i]
> Name   LineUri Status
> ----   ------- ------
> Test 3 3445664 Spare

$csv[$i].Status = 'Used'
$csv | Export-Csv -Path .\PhoneDataNew.csv -NoTypeInformation

$csv=Import csv C:\Users\user\Desktop\PhoneData.csv-Delimiter“,“
已经为您提供了一个很好的csv文件对象。无需先将其放入对象中

代码beneith将读取CSV,然后查看每一行,当状态为“空闲”时,您可以根据需要更改任何内容来更改该行。最后一行代码将csv导出到原始文件,其中
-force
参数确保csv将被覆盖

$file = "C:\Users\user\Desktop\PhoneData.csv"
$csv = Import-Csv $file -Delimiter ","
foreach ($line in $CSV) {
    if ($line.Status -eq "Spare") {
        $line.Status = "Something else"
        $line.Name = "Something else"
        $line.LineUri = "Something else"
    }
}
$csv | Export-Csv $file -Delimiter "," -NoTypeInformation -Force

我想更新存储在$Where变量中的单元格的值。CSV将有其他具有备用值的单元格。您可以更新问题吗?还不完全清楚-是否要更新上次出现的
备件
?还是第一个?我想做的是在CSV中找到备用号码并使用它,然后将值更改为used。我只想更新一个单元格,而不是所有的单元格。如果你添加一个前后示例,可能会更容易,我不明白你的意思。为什么行号很重要?如果有许多行具有该值,您如何知道要更新哪个
备用
?我已经重新措辞了这个问题。为了清楚起见,您是否要指定一个数字,如果找到该数字,请将状态更新为
已用
,或者是否要将第一次出现的
备用
更改为
已用
?@arco444第一次出现的情况从备用更改为已用$其中=[array]::IndexOf($Status,$currentStatus)将为我提供第一次出现的位置的索引。我的观点是,您不需要获取索引来更改第一次出现的位置,您只需要在找到它时中断foreach循环。请参见我的主页中的更新answer@arco444如果我想用索引来改变状态怎么办?我不知道你为什么要这样做,但是如果你这样做了,那么增加一个计数器,直到你点击事件,仍然打破循环,然后使用计数器值作为索引,效率会更高