はじめに
仕事で設計書のページ数を数えろという指令がたまにあります。
これほど非生産的でつまらない仕事はないのですが、今までは面倒だとは思いつつも1つずつwordファイルを開いては、ページ数をメモしていました。
しかし、VBScriptでページ数が取得できることがわかったので自動でページ数を取得するツールを作ってみました。
[改訂版] VBScriptポケットリファレンス (POCKET REFERENCE)
posted with amazlet at 14.03.16
(株)アンク
技術評論社
売り上げランキング: 98,295
技術評論社
売り上げランキング: 98,295
Wordファイルのページ数を数えるスクリプト(WordPageCounter.vbs)
Option Explicit Call Main() Sub Main() Dim out, folderPath, fso, ts ' パラメタを取得 If Wscript.Arguments.Count = 0 Then folderPath = "." Else folderPath = Wscript.Arguments(0) End If Set fso = CreateObject("Scripting.FileSystemObject") ' サブフォルダに対して、再帰的に処理する out = WordPageCounter(fso, fso.GetFolder(folderPath)) ' 検索結果をCSVファイルに出力 Set ts = fso.CreateTextFile(folderPath & "\" & "WordPageCounter.csv") ts.WriteLine(out) ts.close Set ts = Nothing End Sub ' サブティレクト内のファイル一覧を取得する Function WordPageCounter(fso, folder) Dim file, returnValue, Subfolder returnValue = "" ' 現在のフォルダ配下のwordファイルを探す For Each file in folder.Files returnValue = returnValue & BuiltInDocProperty(fso, file.path) Next ' folder配下のフォルダを列挙する For Each Subfolder in folder.SubFolders ' 再帰呼び出し returnValue = returnValue & WordPageCounter(fso, Subfolder) Next WordPageCounter = returnValue End Function Function BuiltInDocProperty(fso, filepath) Dim ext ext = UCase(fso.GetExtensionName(filepath)) ' wordファイル以外は何もしない If Not (UCase(ext) = "DOC" OR ext = "DOCX") Then Exit Function End If ' wordアプリケーションを起動 Dim wordApp : Set wordApp = WScript.CreateObject("Word.Application") ' wordファイルを開く Dim doc : Set doc = wordApp.Documents.Open(filepath) ' for debug WScript.Echo filepath & "," & doc.BuiltInDocumentProperties(14) ' ファイル名、ページ数をカンマ区切りにして返す BuiltInDocProperty = filepath & "," & doc.BuiltInDocumentProperties(14) & vbNewLine ' wordアプリケーションの終了 doc.Close Set doc = Nothing wordApp.Quit Set wordApp = Nothing End Function
使い方
1.上記のソースコードを「WordPageCounter.vbs」という名前で保存します。
2.コマンドプロンプトを開き、以下のように呼び出します。フォルダパスを省略した場合、スクリプトが置かれているカレントフォルダとその配下のフォルダが対象となります。
cscript WordPageCounter.vbs "フォルダパス"
3.集計が終わるとWordPageCounter.csvというファイルが出力され、ファイル毎にページ数が出力されます。
関連記事