Powershell ExcelファイルのWorksheet名存在確認

Worksheet名存在確認

# Excelオブジェクトの作成
$excel = New-Object -ComObject Excel.Application

# Excelアプリケーションの表示を非表示にする(必要に応じて)
$excel.Visible = $false

# 既存のExcelファイルを開く
$wb = $excel.Workbooks.Open("Excel.xlsx")

# Worksheet名の存在確認
# 引数: wb: Workbookオブジェクト, wsName: Worksheet名
function ExistSheet {
    param([object]$wb, [string]$wsName)

    foreach ($sheet in $wb.Sheets) {
        if ($sheet.Name -eq $wsName) {
            return $true
        }
    }
    return $false
}

$SheetName = "Sheet1" # 確認するシート名

$result = ExistSheet -wb $wb -wsName $SheetName
if ($result) {
    Write-Host "${SheetName}は存在します。"
} else {
    Write-Host "${SheetName}は存在しません。"
}

$SheetName = "Sheet2" # 確認するシート名

$result = ExistSheet -wb $wb -wsName $SheetName
if ($result) {
    Write-Host "${SheetName}は存在します。"
} else {
    Write-Host "${SheetName}は存在しません。"
}

# Excelファイルを閉じる
$wb.Close()

# Excelアプリケーションを終了
$excel.Quit()

# COMオブジェクトの解放
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wb) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

# 変数の明示的な解放
$sheet = $null; $wb = $null; $excel = $null

# ガベージコレクションを実行
[System.GC]::Collect(); [System.GC]::WaitForPendingFinalizers()
[System.GC]::Collect(); [System.GC]::WaitForPendingFinalizers()