【问题标题】:Close excel application using Powershell使用 Powershell 关闭 excel 应用程序
【发布时间】:2016-11-25 01:09:19
【问题描述】:

我正在从 powershell 启动工作簿中的宏(以自动化流程)。 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应用实例?

非常感谢任何帮助!

【问题讨论】:

  • 你应该调用 book.close / app.quit

标签: vba excel powershell


【解决方案1】:

创建 Excel 文件:

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

关闭 Excel 文件:

$Excel.Close()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
spps -n Excel

【讨论】:

  • 仅供参考:sspsStop-Process 的别名
【解决方案2】:

在释放 COM 对象之前尝试使用 Quit 方法,如下所示:

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

【讨论】:

  • 这很好用,但是从 Book1 运行的宏 powershell 命令会打开第二个默认为“Book2”的工作簿。我仍然遇到的问题是当我运行脚本 Book2 时提示用户在继续之前保存工作簿。我如何也关闭第二个工作簿(所以新的活动工作簿)?
  • 我通过关闭宏中的第二个工作簿来解决,感谢您的帮助!
【解决方案3】:

您可以将此添加到您的 PS 代码中:

kill -processname excel

这将关闭所有打开的 Excel 实例

【讨论】:

  • 当我执行此操作并使用终止进程时加载的工作簿重新启动 Excel 时,Excel 会显示一个文档恢复窗口。我正在寻找一种更优雅的方式来关闭 Excel。
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
相关资源
最近更新 更多