Excelのシートの並び順を逆順にするPowerShellのサンプルコードを作ってみました。
仕様
ローカルの任意の場所にps1ファイルと、Excelファイルを格納します。
Book1.xlsxを開くと、左から以下の順でシートが用意されています。
- Sheet1
- Sheet3
- Sheet5
- Sheet2
- Sheet4
- Sheet6
PowerShellを実行すると、以下のように元の順と逆順に入れ分かるようにします。
- Sheet6
- Sheet4
- Sheet2
- Sheet5
- Sheet3
- Sheet1
※あくまで逆順であって、ソートじゃないことに注意
ソースコード
powershell本体と、PowerShellを実行するためのコマンドです。
コマンド
powershell -ExecutionPolicy RemoteSigned -File "ReserveSheet.ps1"
ReserveSheet.ps1
$excel = New-Object -ComObject Excel.Application
$book = $null
$excel.Visible = $false
$excel.DisplayAlerts = $false
$fileName = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName
$book = $excel.Workbooks.Open($filePath)
# シート名取得(逆順)
$sheetCount = $book.worksheets.count
$workArray = @()
for( $i=0; $i -lt $sheetCount;$i++){
$workArray += $book.sheets($sheetCount-$i).name
}
# シート入れ替え
for( $i=0; $i -le $workArray.Count-1;$i++){
write-host("name:" + $workArray[$i] + " to position:" + ($i+1))
$book.worksheets($workArray[$i]).Move($book.worksheets($i+1))
}
[void]$book.Save()
[void]$book.Close($false)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)|Out-Null
[void]$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)|Out-Null
Pause
実行
実行手順
Windows PowerShellのターミナルを開き、ReserveSheet.ps1を実行するコマンドを打ちます。
実行結果
実行すると以下のようにシートが逆順になっています。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows11 |
2 | PowerShell | 5.1 |
以上です。
コメント