2017-11-06 359 views
0

サイドインジケータで構成されるExcelシートの2番目の列(B)を除外するコードを記述しています。私は、対応する列Aのデータと共に、= >というインジケータだけをフィルタリングして表示しようとしています。しかし、私はエラーExcelでフィルタリングするPowerShellスクリプト

ラインでRangeクラス
のオートフィルタのプロパティを取得することができません取得の下に、私は、コードを実行するたび:14文​​字:1

CSVファイル形式

Name SideIndicator 
asdf = > 
asdf = > 
trew = = 

PowerShellを使用しているExcelオートメーションにはかなり新しいので、間違っているところに固執しています。

コード:

$file1 = "C:\Users\achowdhury\Desktop\Comparedfile.csv" # source's fullpath 
$xl = New-Object -c Excel.Application 
$xl.DisplayAlerts = $false # don't prompt the user 
$wb1 = $xl.Workbooks.Open($file1) # open target 
$sh1 = $wb1.Sheets.Item('Comparedfile') # sheet in workbook 
$sh1.Select() 
$sh1.Range("B1").Select() 
$xlFilterValues = 7 # found in MS documentation 
$filterList = @("= >") 

$rng = $sh1.Cells.Item(2).EntireColumn # selecting the entire column for filtering 
$rng.Select | Out-Null 

$xl.Selection.AutoFilter($sh1, $filterList, $xlFilterValues) 

$wb1.Close($true) # close and save workbook 
$xl.Quit() 
+0

'Comparedfile.csv'を' Comparedfile.xls'(または 'xlsx')形式に変換しようとしましたが、フォーマット上の問題ではないかどうかを確認しましたか? 'csv'がフィルタリングオプションを受け入れるかどうかは不明です。こんにちはマヌー; – Manu

+0

;私はXLSXにファイル形式を変更しますが、私は同じエラーを取得する:(ラインでRangeクラス のオートフィルタプロパティを取得できません :14文字:1 –

+0

あなたのcsvファイルのサンプルを投稿することができ – Manu

答えて

0

私は右のあなたを取得した場合ので、あなたはCSVを持っているが、このようなファイル:

"left","direction","right" 
"asdf","= >","qwert" 
"asdf","= >","qwert" 
"qwert","< =","asdf" 
"asdf","= >","qwert" 

は、あなただけの列direction= >に等しい行をしたいです。このためにはExcelは必要ありません。

$file1 = "C:\Users\achowdhury\Desktop\Comparedfile.csv" # source's fullpath 
$filtered = Import-Csv -Path $file1 | where {$_.direction -eq "= >"} 

今、あなたはあなたが今そうのようなファイル別のCSVにエクスポートすることができ、変数$filteredにおけるそれらのラインがあります:あなただけの出力に最初の列(これの値が欲しい場合

$file2 = "C:\Users\achowdhury\Desktop\Filteredcomparedfile.csv" 
$filtered | Export-Csv -Path $file2 -NoTypeInformation 

かを私の例ではleftという名前とdirectionコラムさ:

$filtered | % { $output = $_.left, $_.direction -join " "; Write-Output $output;} 

KR ギュンター

+0

ありがとうございました。ここで私はフィルタを入れようとしています。それ以降は、フィルタリングされたデータのピボットテーブルを生成する必要があるからです。そして、私は、次の形式である必要がありCSV: - 「名前」、「サイド・インジケータ」 「ASDF」、「=>」 「ASDF」、「=>」、だから、 私は、コードを実行しますbase: - $ file1 = "C:¥Users¥achowdhury¥Desktop¥testcompfile.xlsx"#ソースのフルパス $ filtered =インポート-Csv -Path $ file1 |ここで、{$ _。SideIndicator -eq "=="} $ file2 = "C:\ Users \ achowdhury \ Desktop \ Filteredcomparedfile.csv" $ filtered | Export-Csv -Path $ file2 -NoTypeInformation 新しいファイルが空白になります。 –

+0

'$ filtered = Import-Csv -Path $ file1 |ここで、{$ _。SideIndicator -eq "=="} 'は' $ filtered = Import-Csv -Path $ file1 | {$ _。 "サイドインジケータ" -eq "=="} 'ヘッダに空白があるか、' $ filtered = Import-Csv -Path $ file1 | where {$ _。SideIndicator -eq "= ="} '等号の中にスペースがある場合。 – gpunktschmitz

関連する問題