Powershellだと、再帰的にファイルを探索して、それぞれに対して処理させる、というのが楽そうだったので、WordとExcelをPowershellからPDF化してみる。
コード
param( [string]$filename # 処理対象ファイル名 ) # エラーがあった時点で処理終了 $ErrorActionPreference = "stop" function script:getPDFFileName($filename) { # 元のファイル名.pdfで元ファイルの場所にPDF保存 return (Join-Path (Split-Path -Parent $filename) (Get-Item $filename).BaseName) + ".pdf" } function script:doExceltoPDF($filename) { $excel = New-Object -ComObject Excel.Application # Excelを画面上には表示させないが、警告メッセージは表示 $excel.Visible = $false $excel.DisplayAlerts = $true $book = $excel.Workbooks.Open($filename) # 元のファイル名.pdfで元ファイルの場所にPDF保存 $pdfFilename = getPDFFileName $filename # 全ページをPDF化する # 印刷範囲を加味する $xlTypePDF = 0 $xlQualityStandard = 0 $book.ExportAsFixedFormat($xlTypePDF, $pdfFilename, $xlQualityStandard, $true, $false) # エクセルを閉じる $book.Close($false) $book = $null $excel.Quit() $excel = $null } function script:doWordtoPDF($filename) { $word = New-Object -ComObject Word.Application # Wordを画面上には表示させない $word.Visible = $false # 2個目の引数:変換ダイアログの要否、3個目の引数:読み込み専用か否か $doc = $word.Documents.Open($filename, $false, $true) # 元のファイル名.pdfで元ファイルの場所にPDF保存 $pdfFilename = getPDFFileName $filename $wdExportFormatPDF = 17 $wdExportOptimizeForPrint = 0 # 全ページを印刷に最適化してPDF化 $doc.ExportAsFixedFormat($pdfFilename, $wdExportFormatPDF, $false, $wdExportOptimizeForPrint) # ワードを閉じる $word.Documents.Close($false) $word.Quit() $word = $null } function script:Main($filename) { $fileExtension = (Get-Item $filename).Extension If ($fileExtension -like "*xls*") { echo "excel" doExceltoPDF $filename } ElseIf ($fileExtension -like "*doc*") { echo "word" doWordtoPDF $filename } } Main $filename
実行例
PS C:\Users\hoge\Documents\Powershells> .\ファイルを判定して実行.ps1 "C:\Users\hoge\Desktop\ページ高さチェック.xlsx" excel PS C:\Users\hoge\Documents\Powershells> .\ファイルを判定して実行.ps1 "C:\Users\hoge\Desktop\1ページ縦.docx" word