$ workbook.AutoFilter( "DATA")を使用して特定の情報のみを表示するために、1番目のフィルター内で列をフィルター処理できる数千のエントリを含むxlsxファイルがあります。
このフィルターは1秒しかかかりませんが、最初のcolumn="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()
}
}
修正済み..ループ後方$i-- * ただし、何らかの理由で、表示可能な行の約10%が削除されないままになるため、これは残念ながら失敗しました。2回実行すると機能しますが、スケールアップすると大きな問題になります。
完璧な世界で私はこのようなものが欲しいです
$Excel.selection.autofilter(1,"DATA").DELETE()
天才が持っているかもしれないヒントやトリックを事前に感謝します。
更新: Graimerに感謝します、あなたは正しいです、私は他の方向にループする必要があります、これはまだ10,000以上のエントリでかなりの時間がかかります...私は手動ループなしでそれを行う方法を探しています。
$ Excel.visible = $ trueに移動し、次に$ Excel.selection.autofilter(1、 "DATA")...に移動すると、ユーザーとしてCtrl + Aを押して、選択した行を削除します...手動で実行するよりも速くなります。ループプロセス...私は助けることはできませんが、そのアクションをスクリプト化する何らかの方法がなければならないと思います。