【问题标题】:Close specific Excel file using Powershell使用 Powershell 关闭特定的 Excel 文件
【发布时间】:2019-06-06 14:24:38
【问题描述】:

用于终止特定 Excel 文件的适当 PowerShell cmdlet 是什么。命令

Stop-Process -Name "excel"

关闭所有打开的 Excel 应用程序。

提前致谢!

【问题讨论】:

    标签: powershell


    【解决方案1】:

    实际上,excel 在excel.exe 的一个实例中打开.xlsx 文件

    杀死 excel.exe 将杀死所有打开的工作簿。 MainWindowTitle 仅显示活动工作簿,因此您将无法按属性匹配被动工作簿。

    关闭特定工作簿的更好方法是通过com对象获取excel实例。

    关闭与Name(文件名)或FullName(文件路径)匹配的工作簿

    $excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
    $excel.DisplayAlerts = $false
    $excel.Workbooks | %{if($_.Name -imatch "excel file name"){$_.Close()}}
    

    【讨论】:

    • 我一定是做错了什么。当我尝试使用全名时似乎不起作用。
    • $excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application") $excel.DisplayAlerts = $false $excel.Workbooks | %{if($_.FullName -imatch "M:\Items.xlsx"){$_.Close()}}
    • @drdrdr -imatch 运算符是一个正则表达式,如果你不熟悉它,你可以很容易地将-imatch 更改为-like。例如$_.FullName -like "M:\Items.xlsx" 甚至 -eq "M:\Items.xlsx"
    【解决方案2】:

    试试这个:

    Get-Process excel –ea 0 | Where-Object { $_.MainWindowTitle –like ‘*report.csv*’ } | Stop-Process
    

    这是来自 MS 的官方指南:

    Stop-Process

    【讨论】:

    • 这种方式有效。但是你有没有办法在再次打开excel文件时不触发文档恢复
    【解决方案3】:
    $Application = New-Object -ComObject excel.application
    $Application.Visible=$True
    
    $workbook = $application.Workbooks.open("C:\mySheet.xlsx")
    
    Start-Sleep -Seconds 5
    
    $workbook.close($false)
    

    问题是在文档关闭时窗口仍然打开。

    希望它仍然有帮助。 BR

    【讨论】:

    • 为什么总是弄乱我的 xD 格式并删除我写的第一行...
    猜你喜欢
    • 2021-10-23
    • 2021-11-10
    • 2023-01-19
    • 2021-10-23
    • 1970-01-01
    • 2020-03-28
    • 2016-11-25
    • 2015-09-27
    • 1970-01-01
    相关资源
    最近更新 更多