我有數千個條目 的XLSX文件的組我的第二過濾器內的欄,顯示只有$ workbook.AutoFilter某些信息(「數據」)PowerShell的創先爭優刪除行
此過濾器只需要然而第二秒刪除第一列=「數據」永遠帶着一個循環的所有行。
有沒有一種方法來捕捉隱藏的行的數組或範圍......或任何東西,我可以.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()
}
}
固定 ..向後循環$ i-- * 但是,這讓我失望,因爲某種原因,它留下了大約10%的可見行數未刪除。如果我運行它兩次,但是擴展這將成爲一個更大的問題。
在一個完美的世界,我想這樣的事情
$Excel.selection.autofilter(1,"DATA").DELETE()
預先感謝您的天才可能有任何提示或技巧。
更新:感謝Graimer,你是對的,我要在其他方向循環,這還需要相當長的時間10,000項...我正在尋找一種方式來做到這一點,無需進行手動循環。
如果我去$ Excel.visible = $ true,然後$ Excel.selection.autofilter(1,「DATA」)...然後作爲用戶我ctrl + A並刪除選定的行...其手動更快,然後循環過程...我不能幫助,但認爲必須有某種方式腳本的行動。
這不加快它,但你有沒有試圖扭轉你的for-loop?至少在我的腦子裏,當你刪除第1行時,所有其他人跳上一個級別=有一個新行1)。所以要全部刪除,只要'$ i> 1'或其他什麼都可以從'$ max'開始,然後使用'$ i - '來完成 –