PowerShell を使用して Excel を自動化するすべての例は、次の行で始まります。
PS> $Excel = New-Object -Com Excel.Application
これは、Excel の新しいインスタンスを処理しているようです。たとえば、実行$Excel.Visible = $true
すると空の空白の Excel ウィンドウが表示され、既存のワークブックに切り替わりません。
Excel のインスタンスが既に実行されている場合、それに接続する方法はありますか?
PowerShell を使用して Excel を自動化するすべての例は、次の行で始まります。
PS> $Excel = New-Object -Com Excel.Application
これは、Excel の新しいインスタンスを処理しているようです。たとえば、実行$Excel.Visible = $true
すると空の空白の Excel ウィンドウが表示され、既存のワークブックに切り替わりません。
Excel のインスタンスが既に実行されている場合、それに接続する方法はありますか?
通常のNew-Object
-ComObject
Excel.application の代わりに、これを使用します
$excel = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Application')
休みはそのまま。
1つの欠点。ps1 を開始するのと同じユーザーによって開始された Excel の「インスタンス」のみが取得されます。
はい、この WIN32 API ( AccessibleObjectFromWindow )を使用して、HWND [ウィンドウ ハンドル] 経由で COM オブジェクトにアクセスできます。
( C# 経由でこの API を使用する SO 投稿サンプルはこちらを参照してください)
.
C# でアセンブリを記述したり、Powershell を介して P/Invoke 呼び出しを操作したりする必要がある場合があります。
あなたはそれを試してみて、それがどうなるか見てみましょう。