開始
Excelがすでに起動している場合はそのプロセスを使用します。
プロセスにExcelが存在しない場合は、新たに起動します。
# プロセス中にExcelが存在するか調べる。
$existsExcel = $false
foreach($process in Get-Process) {
if ($process.ProcessName -eq "EXCEL") {
$existsExcel = $true
Break
}
}
# Excelプロセスを起動または取得。
$excel = $null
if ($existsExcel) {
$excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
} else {
$excel = New-Object -ComObject Excel.Application
}
$excel.Visible = $true
$excel.Workbooks.Add()
終了
最後にGCを走らせた時点で、プロセスが開放されます。
Quitせずにブックを開きっぱなしにする場合でも、$nullの代入とGCを走らせておきます。
さもないと、Excelの閉じるボタンでアプリケーションを終了した後でも、Excelがプロセスに残り続ける場合があります。
$excel.Quit()
$excel = $null
[System.GC]::Collect() # GC実行