通過的PowerShell自動化Excel的所有實例開始這一行:如何從PowerShell連接到Excel的現有實例?
PS> $Excel = New-Object -Com Excel.Application
這似乎是處理的Excel,例如一個新的實例運行$Excel.Visiable = $true
將顯示一個空的空白Excel窗口,但不切換到現有工作簿。
如果已經有一個Excel實例在運行,有沒有辦法連接到它?
通過的PowerShell自動化Excel的所有實例開始這一行:如何從PowerShell連接到Excel的現有實例?
PS> $Excel = New-Object -Com Excel.Application
這似乎是處理的Excel,例如一個新的實例運行$Excel.Visiable = $true
將顯示一個空的空白Excel窗口,但不切換到現有工作簿。
如果已經有一個Excel實例在運行,有沒有辦法連接到它?
是的,則可以使用通過this WIN32 API HWND [窗口句柄]訪問COM對象(AccessibleObjectFromWindow)。
(見A SO張貼使用經由C#此API的樣品here)
。
您可能必須在C#和/或manipulate P/Invoke calls via Powershell中編寫程序集。
你可以試試看吧&看它是怎麼回事。
而不是通常New-Object
-ComObject
excel.application我們這個
$excel = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Application')
其餘部分保持不變。
一個缺點。您只會獲得由啓動ps1的同一用戶啓動的excel「實例」。
您是否需要連接到由特定窗口表示的特定Excel實例?如果沒有,你也可以看看像這樣訪問正在運行的Excel實例:http://support.microsoft.com/kb/316126。 KB文章使用C#,但調用(例如System.Runtime.InteropServices.Marshal.GetActiveObject(「Excel.Application」))應該很容易翻譯。 –
只需補充Ian的答案:$ Excel = [Runtime.Interopservices.Marshal] :: GetActiveObject('Excel.Application')將檢索Excel的現有實例。 –
謝謝。但是,我剛剛嘗試過,然後執行'$ Excel.Visiable = $ true' - 它仍然打開一個新的Excel窗口。 – Borek