実現したいこと
Excelファイルで資料を作成する際、
最終的に各シートのフォーカスをA1に、表示倍率を100%に統一したい、とします。
対象が1ファイルだけで、数シートなら手動でやっても構わないのですが、
ファイル数やシート数が多い場合は大変なので、PowerShellでスクリプト化しておきます。
コード
フォーカスと表示倍率を統一する.ps1
# 処理対象のファイル名を取得(複数可)
# ここではスクリプトファイルと同じフォルダにあるファイルを対象とします。
$targetFiles = Get-ChildItem -Path *.xlsx
# Excelオブジェクト作成
$excel = New-Object -ComObject Excel.Application
# 非表示のまま処理する
$excel.Visible = $false
# xlsx ファイルのループ
foreach ($file in $targetFiles) {
# エクセルを開く
$book = $excel.Workbooks.Open($file.FullName)
# シートのループ
foreach ($WorkSheet in $excel.Worksheets) {
# 非表示シートは対象外
if ($WorkSheet.Visible -ne $false) {
# 処理対象のシートを選択状態にする
$WorkSheet.Activate()
# セル「A1」を選択状態にする
$WorkSheet.Cells.Item(1,1).Select() | Out-Null
# 表示倍率を100%にする
$excel.ActiveWindow.Zoom = 100
}
}
# 一番左のシートを選択状態にする(おまけ)
$excel.Worksheets.Item(1).Activate()
# 上書き保存する
$book.save()
$book.close()
}
# 閉じる
$excel.Quit()
# プロセスを解放する
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel
実行例
実行前確認
実行前は、以下のようにフォーカスはA1以外、表示倍率は100%以外になっています。
[Sheet1]
処理実行
D:\>powershell -ExecutionPolicy Unrestricted .\フォーカスと表示倍率を統一する.ps1
実行後確認
実行後は、以下のようにフォーカスはA1、表示倍率は100%に統一されました。
[Sheet1]
補足
- 動作確認環境は Windows 10、PowerShell 5、Excel 2013です。多少前のバージョンでも大丈夫だと思います。
- 処理後のファイルを別名で保存したい場合は
$book.save()
のところを$book.saveAs("別名保存先ファイル名")
にしてください。 - Excelオブジェクトのプロセス解放の仕方はネットで調べるといろいろあるようですが、私は以下のサイトの方法を参考にしています。