PowerShellによってフォルダ内のExcelファイルの印刷枚数を一括で取得するサンプルコード

PowerShell
記事内に広告が含まれています。

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.環境バージョン
1OSWindows10
2PowerShell5.1
環境一覧

以上です。