无法另存为 CSV 文件

Unable to SaveAs CSV file

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

我认为只保存可见单元格是不可能的。您需要将它们复制到新的 sheet 并导出。此外,如果要导出为特定格式,应始终指定 file format,否则将使用默认格式(通常是打开文件的格式)创建输出文件。

改变这个:

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

进入这个:

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

附带说明:不要使用 Stop-Process 终止 Excel 实例。正确的方法是释放COM对象:

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