2016-01-06 54 views
0

我發現了很多關於如何保存Excel並安全關閉進程的文章,但是電子表格仍然不保存Excel進程。另存爲失敗/進程未刪除

有關此事的任何想法將不勝感激。

$file = "C:\temp\testexcel.xls" 
$objExcel = New-Object -ComObject Excel.Application 
$objExcel.Visible = $true 
$objExcel.DisplayAlerts = $false 
$WorkBook = $objExcel.Workbooks.Open("$file") 
$workbook.SaveAs("$file") 

$workbook.Close($true) 
$objExcel.quit() 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel) 
Remove-Variable objExcel 
+0

你有錯誤?當你設置'$ objExcel.DisplayAlerts = $ true'時會發生什麼? –

+0

它現在正在工作。對我來說愚蠢的錯誤。我有一個退出而不是函數返回。因此,清理聲明完全被忽略。有關GC和文件格式的知識對未來有幫助。 – Galactic

回答

1

指定file format保存工作簿爲不同的文件時:

$workbook.SaveAs($file, -4143) 

如果你只是想保存文件使用Save(),不SaveAs()

$workbook.Save() 

而且,跑垃圾收集器釋放COM對象後:

[Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel) 
Remove-Variable objExcel 
[GC]::Collect() 
[GC]::WaitForPendingFinalizers() 
+0

感謝您的快速反饋。我應用了文件格式和GC。另外,爲了測試,我評論了顯示警報。在可見活動狀態下,電子表格顯示和我可以看到發生的變化,但腳本結束並且電子表格保持打開狀態。另外,在關閉電子表格時,我收到有關想要保存更改的消息。畢竟,這個過程仍然存在。它的行爲就像腳本完全跳過了保存語句。 – Galactic