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にするなりすれば、十分使えるだろう。
参考
- Excel VBA 印刷される総ページ数を取得するPages.Countプロパティ
- この記事は基本的に上記の内容をPowershellで実装しただけ。
- Excel 2007 および Excel 2010 で Pages.Count プロパティを取得すると実際の印刷総ページ数と異なる値を取得する
- 古いExcelではページ数が正しく取得できないことがあるようだ。