2016-07-21 410 views
1

我正在從PowerShell的工作簿中啓動宏(以自動化一個進程)。下面的PowerShell打開Excel工作簿,並運行宏而不顯示過程。使用PowerShell關閉Excel應用程序

問題是,即使我沒有看到宏正在運行,從宏中生成的Excel的新實例仍然處於打開狀態。

# start Excel 
$excel = New-Object -comobject Excel.Application 

#open file 
$FilePath = 'C:\file\Book1.xlsm' 
$workbook = $excel.Workbooks.Open($FilePath) 


#access the Application object and run a macro 
$app = $excel.Application 
$app.Run("macro") 


#close excel 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) 
Start-Sleep 1 
'Excel processes: {0}' -f @(Get-Process excel -ea 0).Count 
Remove-Variable $excel 

exit $LASTEXITCODE 

該excel文件仍然作爲一個進程在任務管理器中,並佔用內存空間。

如何讓powershell完全關閉通過宏打開的excel應用程序的實例?

enter image description here

任何幫助,不勝感激!

+0

你也許應該叫book.close/app.quit –

回答

2

嘗試使用退出方法你釋放COM對象之前,像這樣:

$excel.Quit() 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) 
Remove-Variable excel 
+0

偉大的作品,然而,從Book1運行的宏PowerShell命令會打開另一個默認爲「Book2」的工作簿。我仍然遇到的問題是,當我運行腳本時,Book2會提示用戶在繼續之前保存工作簿。我如何關閉第二個工作簿(所以新的活動工作簿)? – Ariel

+0

我通過關閉宏中的第二個工作簿來解決問題,感謝您的幫助! – Ariel

1

你可以添加到您的PS代碼:

kill -processname excel 

這將關閉所有的Excel打開實例