gpt4 book ai didi

excel - 如何在 PowerShell 脚本后停止 Excel 进程在后台运行?

转载 作者:行者123 更新时间:2023-12-01 12:57:18 26 4
gpt4 key购买 nike

无论我尝试什么,Excel 2013 都会继续在 Windows 10 的后台运行,无论我在 PowerShell 脚本末尾抛出什么命令。我已经尝试将我发现的所有建议添加到我的脚本末尾,并且我打开的唯一 Excel 对象继续保持打开状态。这是我在脚本末尾的内容。还有其他建议吗?

## Quit Excel and Terminate Excel Application process:
$xlsxwb.quit
$xlsxobj.Quit

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

最佳答案

我遇到了同样的问题并尝试了各种解决方案但没有成功。当我开始释放我保存为变量的所有 COM 对象时,我更接近了,而不仅仅是工作簿、工作表和 Excel 应用程序的对象。

例如,采用以下示例代码:

$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $False
$Workbook = $Excel.Workbooks.Open("C:\Temp\test.xlsx")
$Worksheet = $Workbook.Worksheets.Item(1)
$UsedRange = $Worksheet.UsedRange
$Range = $Worksheet.Range("A1:B10")
$Workbook.Close()
$Excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Range)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($UsedRange)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Worksheet)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Workbook)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
[GC]::Collect()

如果您只取出一个 ReleaseComObject 语句,Excel 进程将保持打开状态。在我的代码中,我首先发布范围、表格等所有内容,然后发布工作表、工作簿,最后发布 Excel 应用程序本身。然后因为这似乎只有 90% 的时间有效,所以我在最后添加了垃圾收集命令,最后有了一个似乎每次都有效的解决方案,而无需终止进程。

备注 : 我的系统是带有 PowerShell v5 和 Office 2013 的 Windows 8.1。

关于excel - 如何在 PowerShell 脚本后停止 Excel 进程在后台运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39044995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com