如何获取已打开指定文件的Excel进程PID并赋值给自定义变量
获取打开指定文件的Excel进程PID并赋值给变量的实现方法
你需要的功能可以通过PowerShell实现,原生Get-Process没有自带按打开文件筛选Excel进程的参数,以下是两种可直接使用的实现方案:
方案1:快速匹配(适合同名文件不同时打开的场景)
执行速度快,通过Excel窗口标题带文件名的特性匹配:
# 替换为你的目标文件完整路径 $targetFile = "C:\Excel\file.xlsx" $fileName = Split-Path $targetFile -Leaf $FilePID = (Get-Process -Name EXCEL | Where-Object {$_.MainWindowTitle -like "*$fileName*"}).Id
赋值完成后直接输入$FilePID即可查看对应进程ID。
方案2:精准路径匹配(无重名冲突,稳定性更高)
适合多个重名文件同时打开的场景,直接匹配文件完整路径:
# 替换为你的目标文件完整路径 $targetFilePath = "C:\Excel\file.xlsx" $FilePID = $null Get-Process -Name EXCEL -ErrorAction SilentlyContinue | ForEach-Object { $currentPID = $_.Id $windowHandle = $_.MainWindowHandle try { $excelApp = [Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application") for ($i = 1; $i -le $excelApp.Workbooks.Count; $i++) { if ($excelApp.Workbooks.Item($i).FullName -eq $targetFilePath -and $excelApp.Hwnd -eq $windowHandle) { $FilePID = $currentPID break } } } catch {} if ($FilePID) { break } }
补充说明:
- 若没有找到打开指定文件的Excel进程,
$FilePID会保持空值,可直接用于后续逻辑判断 - 执行脚本时需确保对应Excel文件处于已打开状态
内容的提问来源于stack exchange,提问作者ASD
相关产品推荐
相关产品推荐

