【发布时间】:2021-05-31 05:36:48
【问题描述】:
我有一个 PowerShell 脚本,它在 Excel 文件中搜索特定值(“#N/A”,来自失败的 VLOOKUP),该值需要快速删除所有行之后并包括该行。
到目前为止我做了什么:
$sheetRange = $sheetData.UsedRange
$colRange = $sheetData.Range("F1")
[void] $sheetRange.Sort($colRange)
$fileWorking.Save()
$strFinder = "#N/A"
$rngSearch = $sheetData.Range("F1").EntireColumn
$txtFound = $rngSearch.Find($strFinder)
$RowFound = ($txtFound.Row)
for (($i = $RowFound); ($i -le $rowsTrans); $i++)
{
$currRow = $sheetData.Cells.Item($i).EntireRow
[void]$currRow.Delete()
}
$fileWorking.Save()
问题是,有超过 200k 行,我需要删除整个范围,而不是一次删除一行。虽然我对语法有些摸不着头脑,但我无法完全弄清楚实现这一点的正确语法或方法。
显然,for 循环只需要执行,我需要设置$RowFound 和$rowsTrans 之间的整个范围...但是这是如何完成的?
【问题讨论】:
-
你能构造一个包含所有地址的连接字符串然后用它来删除吗?例如
...Range("A2, A4, A10, A19").entireRow.Delete使用范围对象定义很像范围对象的联合。 -
@Jeeped 我的语法,在分配“组”范围时是错误的。我自己想通了,但是您的回答与我的错误相同。我试图做 ...Range("A"+$RowFound+":A"+$rowTrans) (注意“:”)。您是否会将您的评论改写为更正我所描述的语法的答案,我会接受吗? ;)
标签: excel powershell