2015-01-11 40 views
0

我想使用PowerShell保存CSV文件,但我無法這樣做。我嘗試了各種方法,花了很多時間,但仍然無法弄清楚爲什麼我無法保存結果文件。以下是相同的示例代碼。無法另存爲CSV文件

$file1 = "C:\Users\vicky\desktop\SourceFile.csv"  # CSV Source file 
$xl = new-object -c excel.application 
$xl.Visible = $true 
$xl.DisplayAlerts = $false 
$wb=$xl.workbooks.open($file1) 
$ws=$wb.worksheets.item("SourceFile")    # Sheet name 
$ws.activate 
$rng = $ws.Cells.Item(1,6).EntireColumn 
$rng.select #selecting range 
$filterval = "Y" 
$xl.selection.AutoFilter(9,$filterval)    # Applying filter on 9th column from left of the source file 
$ws.SaveAs("C:\Users\vicky\Desktop\newFile.csv")  # Save filtered output as newFile 
$wb.close() 
$xl.quit() 
$a= get-process -name EXCEL | select -expand Id  # Finding Process Id of Excel 
stop-process $a          # To kill Excel Process 

我需要在列上應用篩選器,然後用新文件名存儲篩選文件。我可以應用過濾器,但無法將輸出保存到另一個CSV文件。

+0

您是否收到錯誤消息?它是否創建一個文件?它似乎爲我工作,除非Excel想要恢復文件的內容,因爲沒有指定格式。這是問題嗎? – raney

+0

不,我沒有收到任何錯誤。它過濾數據並立即顯示所需的顯示輸出,但不會將其保存到newFile.csv,並且newFile.csv的內容與Sourcefile.csv的內容保持相同。 – VickyRoch

+0

如果我評論最後四行代碼,我可以看到所需的輸出,例如#$ wb.close() #$ xl.quit() #$ a = get-process -name EXCEL | select -expand Id #stop-process $ a但是,當這些行被帶回到操作中時,過濾後的結果會丟失:( – VickyRoch

回答

1

我不認爲有可能只保存可見細胞。您需要將它們複製到新工作表並將其導出。另外,如果要導出爲特定格式,則應始終指定file format,否則將使用默認格式(通常爲打開文件的格式)創建輸出文件。

更改此:

$xl.selection.AutoFilter(9,$filterval) 
$ws.SaveAs("C:\Users\vicky\Desktop\newFile.csv") 
$wb.close()

到這一點:

$xl.selection.AutoFilter(9,$filterval) 
$ws2 = $wb.Sheets.Add() $ws.UsedRange.SpecialCells(12).Copy() $ws2.Paste() $ws2.SaveAs("C:\Users\vicky\Desktop\newFile.csv", 6) 
$wb.Saved = $true 
$wb.close()

作爲一個邊注:請不要使用Stop-Process終止Excel實例。正確的方法是釋放COM對象:

$xl.Quit() 
[Runtime.InteropServices.Marshal]::ReleaseComObject($xl) 
[GC]::Collect() 
[GC]::WaitForPendingFinalizers()