読者です 読者をやめる 読者になる 読者になる

小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Wordファイルのページ数を自動で数えるVBScript作ったよ。

f:id:replication:20140316234522p:plain

はじめに

仕事で設計書のページ数を数えろという指令がたまにあります。

これほど非生産的でつまらない仕事はないのですが、今までは面倒だとは思いつつも1つずつwordファイルを開いては、ページ数をメモしていました。

しかし、VBScriptでページ数が取得できることがわかったので自動でページ数を取得するツールを作ってみました。

全ては時の中に… : 【Word VBA】VBAでページ数を取得する全ては時の中に… : 【Word VBA】VBAでページ数を取得する

[改訂版] VBScriptポケットリファレンス (POCKET REFERENCE)
(株)アンク
技術評論社
売り上げランキング: 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というファイルが出力され、ファイル毎にページ数が出力されます。

関連記事