Powershellで古い形式のExcel(xls)を新しい形式(xlsx)に変換する。
概要
下記の記事で作ったものと似たものを簡潔に書いてみました。
実装
ソースコード
$ErrorActionPreference = "Stop" # 例外が出たらその時点で即終了 $srcDir = (Resolve-Path $args[0]).Path $dstDir = (Resolve-Path $args[1]).Path try{ # Excelオブジェクト作成 $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false Get-ChildItem -Path $srcDir -Filter "*.xls" | % { $dstPath = Join-Path $dstDir $($_.BaseName + ".xlsx") if(-not (Test-Path -Path $dstPath)) { $book = $excel.Workbooks.Open($_.FullName) $book.SaveAs($dstPath, 51) $book.Close() } else { } } } finally { $excel.Quit() }
呼び出し方(Xls2Xlsx.ps1)
# 相対パス、絶対パス両方OKですが存在しないパスはできません。
Xls2Xlsx.ps1 .\dst .\src
今回試したこと
- Try-Catch-Finally
- Resolve-Pathによる相対パスの解決
- Join-Pathによるパスの結合 (今まで[System.IO.Path]::Combineを呼んでいた…)
- $ErrorActionPreference
感想
- Resolve-Pathが存在しないパスだと例外出るので便利
- PowerShellだとXlFileFormatに名前でアクセスできるから実装が楽で可読性も上がる
- コマンド形式で書き直してみたい(そこらへん無知)
以上