Excelのシートの並びを逆順にするPowerShellのサンプルコードを作ってみました。
仕様
ローカルの任意の場所にPowerShellの*.ps1ファイルと、並び順を逆にする対象のExcelファイルを格納します。
Book1.xlsxを開くとSheet1,3,5,2,4,6のようにシートが用意されています。
PowerShellを実行した後に、Sheet6,4,2,5,3,1のように元の順と逆順に入れ替えます。
※あくまで逆順であって、ソートじゃないですよ。
ソースコード
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を実行するコマンドを打ちます。
実行結果
実行すると以下のようにシートが逆順になっています。
ぜひ記事の上のほうにある実行前のキャプチャのシート順を見比べてみてください。
参考のために実行前後の比較結果を、一覧化してみました。
比較 | シート順 |
---|---|
実行前 | Sheet1, Sheet3, Sheet5, Sheet2, Sheet4, Sheet6 |
実行後 | Sheet6, Sheet4, Sheet2, Sheet5, Sheet3, Sheet1 |
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows11 |
2 | PowerShell | 5.1 |
以上です。
コメント