フォルダ配下のExcelをPowerShellスクリプトを使って指定のシートのある行から下の値をすべて消す

$folderPath = "C:\Path\To\Folder" # 対象のフォルダパス
$sheetName = "Sheet1" # 操作するシート名
$startRow = 5 # 削除する開始行(例: 5行目から下を削除)

# フォルダ内のすべてのExcelファイルを取得
$excelFiles = Get-ChildItem -Path $folderPath -Filter "*.xlsx" -Recurse

# Excelファイルごとに処理を実行
foreach ($file in $excelFiles) {
$excel = New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Open($file.FullName)

try {
# シートを取得
$sheet = $workbook.Sheets.Item($sheetName)

# 削除する行の範囲を取得
$startCell = $sheet.Cells.Item($startRow, 1)
$endCell = $sheet.Cells.Item($sheet.UsedRange.Rows.Count, $sheet.UsedRange.Columns.Count)
$range = $sheet.Range($startCell, $endCell)
$range.EntireRow.Delete()

# 変更を保存(任意)
#$workbook.Save()

Write-Host "処理完了: $($file.Name)"
}
catch {
Write-Host "エラー発生: $($file.Name) - $($_.Exception.Message)"
}
finally {
# Excelオブジェクトを解放
$workbook.Close($false)
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
}
Author: gaa

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です