Close excel application using Powershell

2020-07-18 09:48发布

I am initiating a macro in a workbook from powershell (to automate a process). The below in powershell opens the excel workbook and runs the macro without visualizing the process.

The issue is even though I do not see the macro running, the new instance of excel generated from the macro is still open.

# 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

The excel file still comes up as a process in task manager and is taking up memory space.

How do I have powershell completely close the instance of the excel application that opens through the macro?

enter image description here

Any help greatly appreciated!

3条回答
贪生不怕死
2楼-- · 2020-07-18 10:20

You could add this to your PS code:

kill -processname excel

This will close all open instances of Excel

查看更多
Melony?
3楼-- · 2020-07-18 10:26

Try using Quit method before you release COM object, like this:

$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Remove-Variable excel
查看更多
你好瞎i
4楼-- · 2020-07-18 10:29

Creating the Excel file:

$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $True
...

Closing down the Excel file:

$Excel.Close()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
spps -n Excel
查看更多
登录 后发表回答