PowerShellによってフォルダ内のExcelファイルの印刷枚数を一括で取得するサンプルコードを作成しました。
Excelファイルの印刷枚数カウントのよくある悩み
納品前になって突然ですね、
作った成果物(Excel)の枚数を一覧化してください
なんていうことがたまにあります。
これが2、3ファイルならたいした作業じゃないからいいんです。
が、この作業はふたを開けるとファイル数が多かったり、開いてみてシート数が何十とかあったりします。
実際にやると何時間も時間がかかりませんか?
地球環境を大事にする時代にプリンタの印刷枚数なんか数えてもなあ
が、偉い人が物量を知る指標としてはいいんでしょうね、きっと。
ただこの作業、ちょっとスクリプトを組めばすぐ作業が終わるかもしれません。
仕様
例として下記のようなPowerShellと、印刷枚数をカウントするExcelファイルを用意します。
Excelファイルはシートを複数用意して、印刷枚数を分かりやすくするため、改ページプレビューをしています。
ファイル数と、シート数はいくらあっても良いものとして考えますが今回は2ファイル、各々数シートで考えます。
ソースコード
各Excelファイル、Excelファイル内のシートをループして全ての印刷枚数を出力します。
CountPrintPage.ps1
$excel = New-Object -ComObject Excel.Application
$book = $null
$excel.Visible = $false
$excel.DisplayAlerts = $false
$files = Get-Item *.xlsx
foreach($file in $files){
$book = $excel.Workbooks.Open($file)
Write-Host("ファイル名:" + $file.name)
foreach($sheet in $book.Worksheets){
$printNum = $sheet.PageSetup.Pages.Count
Write-Host(" - シート名:" + $sheet.name + "、枚数:" + $printNum)
}
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
}
[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Pause
テスト実行
実行は下記のとおりです。
「CountPrintPage.ps1」を選択して、右クリックメニューから「PowerShellで実行」をクリックします。
するとウィンドウが開いて、各ファイルのシート名と各々のプリント枚数が表示されました。
実行結果は。
Excelで加工する場合はCSV形式とか、で出力したほうが便利かもしれません。
参考情報
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
以上です。