【问题标题】:Delete rows with specific values删除具有特定值的行
【发布时间】:2021-12-14 12:43:59
【问题描述】:

我正在使用我的脚本的这一部分来删除有值的每一行:admin

$i = 1

Do {
    If ($worksheet.Cells.Item($i, 1).Value() -eq 'admin') 
      {
            $objRange = $worksheet.Cells.Item($i, 5).EntireRow
            $objRange.Delete()
        $i -= 1 
      }
      $i += 1
}

While ($worksheet.Cells.Item($i,1).Value() -ne $null)

我想知道如何添加一些不同的值并删除更多的行,例如:系统、计算机...

谢谢!

【问题讨论】:

  • 我看到您正在执行$i -= 1 以删除重复项。这是个好主意,但更好的办法是从头跑到尾。为什么这样更好?好吧,在大多数情况下,您会说“从 start_index 到 end_index”,当您删除条目时,您的“end_index”可能会越界。在从头到尾工作“end_index 回到 start_index”时,您永远不会遇到边界问题。
  • 一种方法是使用-in 运算符来查看.Value() 字符串是否在运算符另一侧的列表中。看看Get-Help about_Comparison_Operators

标签: excel powershell delete-row


【解决方案1】:

使用-in 集合包含运算符:

$rowValuesToDelete = 'admin','system','computer'

if($worksheet.Cells.Item($i, 1).Value() -in $rowValuesToDelete) {
  # ...
}

【讨论】:

  • 非常感谢,这正是我需要的!