如何从PowerShell连接到Excel的现有实例?

所有通过PowerShell自动运行Excel的示例都以这一行开头:

PS> $Excel = New-Object -Com Excel.Application 

这似乎是处理一个新的Excel实例,例如运行$Excel.Visiable = $true将显示一个空的空白Excel窗口,而不是切换到现有的工作簿。

如果已经有一个Excel实例在运行,有没有办法连接到它?

而不是通常的New-Object -ComObject我们这个

$excel = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Application')

rest保持不变。

一个缺点 你只会得到由启动ps1的同一个用户启动的excel“实例”。

是的,您可以使用此WIN32 API ( AccessibleObjectFromWindow )通过HWND [窗口句柄]访问COM对象。

(请参阅这里通过C#使用此api的SO后示例)

您可能必须在C#中编写程序集并/或通过Powershell操作P / Invoke调用 。

你可以试试看,看看它是如何发展的。