0

我有一个包含数千个条目的 xlsx 文件,我可以在一秒钟内过滤一列以仅使用 $workbook.AutoFilter("DATA") 显示某些信息

这个过滤器只需要一秒钟,但是删除所有第一列 = "DATA" 的行需要永远循环。

有没有办法捕获隐藏行或范围的数组...或任何我可以 .DELETE()

我试过这个

[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()
    }
}

FIXED .. 向后循环 $i-- * 然而,这让我很失望,因为由于某种原因,它留下了大约 10% 的可见行未删除。如果我运行它两次它可以工作但是扩大这将成为一个更大的问题。

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

$Excel.selection.autofilter(1,"DATA").DELETE()

提前感谢您的天才可能拥有的任何提示或技巧。

更新:谢谢 Graimer,你说得对,我必须在其他方向循环,这仍然需要相当长的时间,有 10,000 多个条目......我正在寻找一种无需手动循环的方法。

如果我去 $Excel.visible = $true, 然后 $Excel.selection.autofilter(1,"DATA")... 然后作为用户我 ctrl+A 并删除选定的行...它手动比循环过程...我不禁认为必须有某种方法来编写该动作的脚本。

4

1 回答 1

0

应用一个拟合器选择从 row1 到 Lastrow 的范围,删除范围后,结果很容易。因为过滤器只显示一个值范围不能选择隐藏单元格

于 2013-02-25T19:21:16.520 回答