PowershellでExcelファイルの印刷ページ数を取得する

Excelファイルを印刷したときのページ数を複数のファイルについて調べる必要があった。*1 手動でやるのはつらいのでPowershellで実装するやり方を調べた。

以下のようにCOM経由でExcelにアクセスしたあと、各ワークシートの印刷設定(PageSetup)から、ページ枚数(Pages.Count)を取得できるので、それを合算してファイル毎のページ数を求めることができた。 残念ながら、Workbook単位でページ数の情報は持っていないようだ。

# 初期化
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false

# 対象のファイルパス
$ExcelPath="C:\hoge.xlsx"

# ページ数の取得と出力
$book = $excel.Workbooks.Open($ExcelPath)
$book.WorkSheets | ForEach-Object { $_.PageSetup.Pages.Count } | Measure-Object -sum 

# 後処理
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

もう少し使いやすくfunctionにするなりすれば、十分使えるだろう。

参考

*1:そもそもページ数管理でいいのか、とか、Excelを資料印刷に使うのか、とか言いたいことはたくさんあるけれど、ひとまず置いておく