VBスクリプトで、ホットフォルダーを使って作業を効率化!
管理者用今日は、ホットホルダーを使って効率アップ! を取り上げました。
桜の満開宣言も出てましたが、私ども名刺屋さんは、この時期結構忙しく、花見どころではありません。
新しい年度の準備と言う事で、人事異動、組織変更など、新規の名刺が一時期に集中します。
それも、本当に短い期間なのです。
名刺をお受けしている宿命ですかねー!
こんな事も有り、作業の効率化などには、様々な取り組みを行って来ました。
少し前の三栄NAVIの中で、VBSで作業の効率化の話を取り上げました。
同業他社の印刷屋さんからの名刺印刷もお受けしてますが、この場合、完成データの入稿が多いのです。
完成データでの入稿ですから、私どもの作業は、そのデータをCTP印刷機に出力して、オフセット印刷するだけです。
CTP出力作業は、パソコンから、プリンターに印刷操作の単純な作業です。
しかし、これが、結構大変なのです。
このCTP出力作業作業をドラック&ドロップだけで出来るようにVBスクリプトを紹介しました。
大きな成果が出てます。
⇒ VBSをドラック&ドロップ対応化で作業の効率化(2) を参照
しかし、単純なドラックの作業だけでも数が多くなると大変な作業になります。
そこで、今日は、もう一歩進んだ方法を取り上げたいと思います。
実は、これから紹介する方法は、上手く運用出来れば作業の効率化間違い無しです。
また、色々な作業に応用が利くと思います。
ヒントになったのが、印刷関連の展示会で会った自動化システムの製品です。
商品の説明を聞いていると、ホットホルダー機能の話が良く出て来ます。
自動化の操作の一つの方法です。
特定ホルダーに処理したいファイルを投げ込むと、処理を勝手に実行してくれると言う仕組みです。
いつかスクリプトの中で使って見たいと思っていました。
単純に、特定フォルダーをぐるぐると廻って監視するスクリプトを書けば出来そうです。
ファイルの存在を確認したら、そのファイルを使って実行する。
実行するスクリプトは、先に紹介したドラック&ドロップの時の
⇒ VBSをドラック&ドロップ対応化で作業の効率化(2) を少し書換えるだけで使えます。
簡単に出来そうです。
見えないところで、VBスクリプトで永久ループさせている運用ですが、実際に運用して見ると問題はなさそうです。
もし、自分も実施してみようと思う方は、運用方法は考えてくださいね。
なにが有っても、私には責任ありませんから。
Do While F_End = 0 '永久ループ
特定フォルダーに、入稿ファイルが見つかったら
CTP用印刷機にプリントアウト
Loop
スクリプト動作概要
最後の処にスクリプトを紹介してますが、簡単に動きを順番に紹介します。
・VBスクリプトを起動
特定フォルダーにファイルが書き込まれるまでループ
・ホットホルダーに投げ込む
スクリプト例では、特定フォルダーを "C:\Users\sanei\Desktop\MeishiHotfolder" ディスクトップ上に設けました。
ここに、入稿データの .eps ファイルを保存します。
図では、.epsファイルが Aiのアイコン表示されてます。
・インデザイン処理
.eps ファイルが1件でも検知すると
スクリプトは、サブルーチンのインデザイン処理に移ります。
インデザインを起動
インデザインテンプレートファイルを開く
テンプレートに.epsファイルを配置
CTP印刷機に出力
インデザインテンプレートファイルを閉じる
・ループに戻る
ループ処理に戻り、実行したepsファイルを削除
・ループ(繰り返し)
次の .eps ファイルで、これを繰り返す
・ファイル削除
最終的に .eps ファイルは全て削除されます。
次の図は、全てepsファイルが削除されています。
残ったのはフォルダーだけです。
このホルダーは、処理した.EPSファイルをコピー保存しておく為の使ったものです。
したがって、本来は、何もない状態になるはずですが、削除では無く、どこかのフォルダーに移動させる方が良いかもしれません。
・永久ループは続く
ファイルが無くなってもスクリプトは、ループしてます。
.epsファイルを新たに保存すると、再び同じ作業に入って行きます。
今回は、永久ループを止める為に、epsファイル以外のファイルを保存した時に
ループを止めるようにしてます。
運用方法
運用上、ループの記述を取って、使うのも良いかもしれません。
epsファイルを保存後、スクリプトを実行。
これだけでも、改善効果は有ります。
ホットフォルダーに書き込んだ epsファイルは、処理後削除してますが
どこか、保存しておくような運用もあるかもしれません。
VBスクリプト
参考にスクリプトを紹介してますが、ファイル操作などの記述も有りますので、十分注意して参考にしてください。
'==================================
Option Explicit
Dim strTargetFolderPath
Dim objFiles
Dim objFolder
Dim objFile
Dim FileMei, FileDel
Dim FileCount
Dim F_End
Set objFiles = CreateObject("Scripting.FileSystemObject") 'ファイルシステムオブジェクトを作成
strTargetFolderPath = "C:\Users\sanei\Desktop\MeishiHotfolder" 'このホットフォルダに名刺ファイルを
Set objFolder = objFiles.GetFolder(strTargetFolderPath) 'フォルダオブジェクト取得
F_End = 0
Do While F_End = 0 '永久ループ
FileCount = objFolder.Files.Count 'ファイルの数 フォルダの数は、 objFolder.SubFolders.Count
If FileCount >= 1 Then
For Each objFile In objFolder.Files
'取得したファイルのファイル名を表示
FileMei = objFile.Name
If right(FileMei,3) = "eps" then
Rem ここに処理を記述==================================
Call EPS_File_In(FileMei)
Rem ここ迄に処理を記述=================================
FileDel = strTargetFolderPath & "\" & FileMei
objFiles.DeleteFile FileDel,True 'ファイルを削除
Else
F_End = 1
Exit For 'epsファイルでは無い場合終了
End if
Next
Else
WScript.sleep(2000)
End if
Loop
Set objFolder = Nothing
Set objFiles = Nothing
'==================================
'==================================
Sub EPS_File_In(FileMei)
Dim myInDesign, myDocument, myTextFrame, myTextFrame2
Dim faill_mei
Dim xm, ym,haichi_1_YS, haichi_1_XS, haichi_1_YE, haichi_1_XE, EPSFILMEI
Dim Eps_zahyo, xHaba, yHaba, xHabaCente, Mov_xHabaCente
Set myInDesign = CreateObject("InDesign.Application") 'インデザインを起動する
'Set myDocument = myInDesign.Documents.Add 'ファイルを指定しないD:\2015 Wb 新コンテンツ\NAVI インデザイン効率化\ホットホルダー\OutDAT
'faill_mei = "D:\2015 Wb 新コンテンツ\NAVI インデザイン効率化\ホットホルダー\OutDAT\名刺出力テンプレート.indd"
faill_mei = "C:\Users\sanei\Desktop\名刺出力テンプレート.indd"
Set myDocument = myIndesign.Open(faill_mei)
xm=12.8
ym=12.8
Set myTextFrame = myDocument.TextFrames.Add
haichi_1_YS = 0 - ym
haichi_1_XS = 0 - xm
haichi_1_YE = 210 - ym
haichi_1_XE = 298 - xm
myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
EPSFILMEI = strTargetFolderPath & "\" & FileMei
'EPSFILMEI = "D:\2015 Wb 新コンテンツ\NAVI インデザイン効率化\ホットホルダー\OutDAT\" & "\" & FileMei
myTextFrame.Place ( EPSFILMEI)
myTextFrame.Fit (1718906723)'
Eps_zahyo = myTextFrame.GeometricBounds
xHaba = Eps_zahyo(3)- Eps_zahyo(1)
yHaba = Eps_zahyo(2)- Eps_zahyo(0)
xHabaCente = Eps_zahyo(1) + xHaba / 2
Mov_xHabaCente = xHabaCente - (91 / 2)
myTextFrame.Move Array(Cstr(Eps_zahyo(1)- Mov_xHabaCente) , Cstr(-12.8))
'両面の場合
if InStr(1, FileMei, "両面", 1) => 1 Then 'スペース検索
myDocument.Pages.Add
Set myTextFrame2 = myDocument.Pages.Item(2).TextFrames.Add
myTextFrame2.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
myTextFrame2.Place ( EPSFILMEI)
myTextFrame2.Fit (1718906723)
myTextFrame2.Move Array(Cstr(Eps_zahyo(1)- Mov_xHabaCente) , Cstr(-97.8))
end if
myDocument.PrintOut False 'プリント
myDocument.Save "C:\Users\sanei\Desktop\名刺出力テンプレート2.indd" 'ダミーの書き出し
myDocument.close'ファイルを閉じる
End Sub
'==================================