powershell excel正在删除一组行

powershell excel正在删除一组行,excel,powershell,Excel,Powershell,我有一个包含数千个条目的xlsx文件 我可以在第二秒内使用$workbook.AutoFilterDATA筛选列以仅显示某些信息 此筛选器只需一秒钟,但是删除第一列=数据的所有行将永远使用循环 是否有一种方法可以捕获隐藏行数组或范围。。。或者我能做的任何事。删除 我试过这个 [void] [Reflection.Assembly]::LoadWithPartialName( 'System.Windows.Forms' ) $Excel = New-Object -Com Excel.Appl

我有一个包含数千个条目的xlsx文件 我可以在第二秒内使用$workbook.AutoFilterDATA筛选列以仅显示某些信息

此筛选器只需一秒钟,但是删除第一列=数据的所有行将永远使用循环

是否有一种方法可以捕获隐藏行数组或范围。。。或者我能做的任何事。删除

我试过这个

[void] [Reflection.Assembly]::LoadWithPartialName( 'System.Windows.Forms' ) 
$Excel = New-Object -Com Excel.Application
$WorkBook = $Excel.Workbooks.Open($filename)
$Excel.visible = $true
$Excel.selection.autofilter(1,"DATA")
$sheet = $workbook.Sheets.Item(1)
$max = $sheet.UsedRange.Rows.Count
for ($i=2; $i -le $max; $i++)
{
    $row = $sheet.Cells.Item($i,1).EntireRow
    if ($row.hidden -eq $false)
    {
        $row.Delete()
    }
}
固定。。向后循环$i-* 然而,这让我很失望,因为出于某种原因,它留下了大约10%的可视行未删除。如果我运行它两次,它就工作了,但是扩大规模将成为一个更大的问题

在一个完美的世界里,我想要这样的东西

$Excel.selection.autofilter(1,"DATA").DELETE()
提前感谢你们天才们的任何提示或技巧

更新:谢谢Graimer,你是对的,我必须在其他方向上循环,这仍然需要相当长的时间来处理10000多个条目。。。我正在寻找一种不用手动循环的方法


如果我选择$Excel.visible=$true,然后选择$Excel.selection.autofilter1,数据。。。然后作为用户,我按ctrl+a并删除所选行。。。手动操作比循环过程更快。。。我忍不住想,一定有什么办法来编写这个动作的脚本。

结果非常简单 应用过滤器后,选择从第1行到最后一行的范围,然后删除范围。
因为过滤器只显示一个值,该范围无法选择隐藏单元格

,这并没有加快速度,但您是否尝试反转for循环?至少在我的大脑中,当你删除第1行时,所有其他人都会跳上一级=有一个新的第1行。所以,要删除所有,从$max开始,使用$i-向下运行,只要$i>1或其他任何值