2012-06-18 41 views
3

通過的PowerShell自動化Excel的所有實例開始這一行:如何從PowerShell連接到Excel的現有實例?

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

這似乎是處理的Excel,例如一個新的實例運行$Excel.Visiable = $true將顯示一個空的空白Excel窗口,但不切換到現有工作簿。

如果已經有一個Excel實例在運行,有沒有辦法連接到它?

+0

您是否需要連接到由特定窗口表示的特定Excel實例?如果沒有,你也可以看看像這樣訪問正在運行的Excel實例:http://support.microsoft.com/kb/316126。 KB文章使用C#,但調用(例如System.Runtime.InteropServices.Marshal.GetActiveObject(「Excel.Application」))應該很容易翻譯。 –

+0

只需補充Ian的答案:$ Excel = [Runtime.Interopservices.Marshal] :: GetActiveObject('Excel.Application')將檢索Excel的現有實例。 –

+0

謝謝。但是,我剛剛嘗試過,然後執行'$ Excel.Visiable = $ true' - 它仍然打開一個新的Excel窗口。 – Borek

回答

1

是的,則可以使用通過this WIN32 API HWND [窗口句柄]訪問COM對象(AccessibleObjectFromWindow)。

(見A SO張貼使用經由C#此API的樣品here

您可能必須在C#和/或manipulate P/Invoke calls via Powershell中編寫程序集。

你可以試試看吧&看它是怎麼回事。

10

而不是通常New-Object-ComObject excel.application我們這個

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

其餘部分保持不變。

一個缺點。您只會獲得由啓動ps1的同一用戶啓動的excel「實例」。