无法保存为CSV文件

时间:2015-01-11 02:14:10

标签: excel powershell csv

我正在尝试使用PowerShell保存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文件。

1 个答案:

答案 0 :(得分: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()