QRコードの内容をスクリプトを使ってテキストファイルに出力する方法

概要

QRコードの内容をテキストファイルに出力する例をご紹介いたします。

eDocArrangementのスクリプト処理では、VBS等のスクリプトを記述することが可能です。ユーザ様によって様々なデータ処理を求められる状況において、ベストマッチな処理機能を提供できます。

簡単なものであれば、Webサイトでご紹介するサンプル等を手直しして、ご利用いただけるかと思います。

今回ご紹介する例では、以下の仕様を想定してご説明いたします。

QRコードには、複数の項目を記載するため、名前付きデータ形式(項目名[データ])でテキストを作成します。注文番号、商品名、数量、金額、の4項目が必ず存在することとします。(ここでは、わかりやすく説明するため項目の名前に漢字を使っています。実際の運用では、情報量を減らすため、英文字1文字などに置き換えて運用して頂くのが最適です。)

1ページ1文書のデータを処理することとします。

以下のデータをQRコードにして印刷してあることを前提に、ご説明いたします。

また、処理済の文書は、C:\Testフォルダの下に、年フォルダを作成し、その下に月のフォルダを作成し、ファイル名を注文番号にして保管する仕様とします。

サンプル文書のダウンロード

sample.zip

設定

設定は、eDocArrangementのメニュー > ツール > 処理設定から行うことができます。 (ここでは、ポイントとなる部分を説明しますが、詳細はヘルプファイルを参照してください。)

  • point1

    最初は、設定一覧に何も表示されていません。左下の新規ボタンから設定を追加します。次に、右上の処理名から、「QRコード読み取り」を選択して、処理追加ボタンを押します。

    設定一覧に「設定1」が追加され、その下に「QRコード読み取り1」が追加されます。

    「QRコード読み取り1」をクリックすると設定内容が表示されます。上図のように設定を行います。

    QRコードの位置が特定出来る場合は、「範囲指定する」にチェックを入れて、QRコードの位置をパーセント指定で入力します。

  • point2

    次に、右上の処理名から、「スクリプト実行」を選択して、処理追加ボタンを押します。

    ここで、テキストファイルに出力するスクリプトを記述します。

    以下、スクリプトです。

    '------------------------------------------------------------------------------
    'QRコード情報テキスト出力スクリプト
    '                                                              TechnoStyle,inc.
    '
    'テキストファイルにQRコードの内容を出力します。
    '1文書1ファイルで出力します。名前付きデータをカンマ区切りで以下のように出力しま
    'す。
    '注文番号,商品名,数量,金額
    '
    '出力場所は、以下のスクリプトの「Const WriteFolderName = "C:\Test\データ\"」の
    '場所に出力されます。変更したい場合はパスを書き換えてください。
    '
    'ファイルは、「注文番号.txt」で出力します。同名のファイルが存在した場合は、
    '「注文番号_0001.txt」のように連番を付加したファイル名とします。
    '------------------------------------------------------------------------------
    Option Explicit
    Const WriteFolderName = "C:\Test\データ\"
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    
    Call Main
    
    '------------------------------------------------------------------------------
    'メイン処理
    '------------------------------------------------------------------------------
    Sub Main
    
        Dim fs
        Dim wfile
    
        'QRコードが一つもなかった場合は終了 ---------------------------------------
        If "{%SYNBOL_COUNT(QRコード読み取り1)}" = "0" Then
            Exit Sub
        End If
    
        Set fs = CreateObject("Scripting.FileSystemObject")
    
        '注文番号をファイル名にして保存 -------------------------------------------
        Set wfile = Fs.CreateTextFile(GetFileName(WriteFolderName & _
                          "{%N_DATA(QRコード読み取り1.注文番号)}" & ".txt"), True)
    
        'カンマ区切りでデータを出力 -----------------------------------------------
        wfile.WriteLine "{%N_DATA(QRコード読み取り1.注文番号)}" & "," & _
                        "{%N_DATA(QRコード読み取り1.商品名)}" & "," & _
                        "{%N_DATA(QRコード読み取り1.数量)}" & "," & _
                        "{%N_DATA(QRコード読み取り1.金額)}"
    
        wfile.Close
    
    End Sub
    
    '------------------------------------------------------------------------------
    '機能       ファイルの存在チェックを行い、ファイルが存在する場合はファイル名の
    '           後ろに連番を付加し重複しないファイル名を作成し返却する。
    '引数       vFileName   ファイル名
    '戻り値     重複しないファイル名
    '------------------------------------------------------------------------------
    Function GetFileName(vFileName)
    
        Dim fso
        Dim ItemArray
        Dim Extension
        Dim FileName
        Dim WkFileName
        Dim No
    
        Dim ZeroString
    
        'ファイル名の拡張子を取得 -------------------------------------------------
        ItemArray = Split(vFileName,".")
        Extension = ItemArray(UBound(ItemArray))
    
        'ファイル名の拡張子の前のパスを取得 ---------------------------------------
        FileName = Left(vFileName, Len(vFileName) - (Len(Extension) + 1))
    
        No = 1
        WkFileName = vFileName
    
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        'ファイルの存在チェック ---------------------------------------------------
        Do Until Not (fso.FileExists(WkFileName)) 
    
            'ゼロパディングの処理 -------------------------------------------------
            If Len(CStr(No)) < 4 Then
                ZeroString = String(4 - Len(CStr(No)),"0")
            Else
                ZeroString = ""
            End If
    
            'ファイル名に番号を付加 -----------------------------------------------
            WkFileName = FileName & "_" & ZeroString & CStr(No) & "." & Extension
            No = No + 1
        Loop
    
        'ファイルを返却 -----------------------------------------------------------
        GetFileName = WkFileName
    
    End Function

    スクリプトの詳細については説明しませんが、以下の箇所を変更すると、カスタマイズが可能です。

     C:\Test\データ\  」 : テキストファイルの出力先です。環境によって任意に変更してください。

    また、出力先のフォルダはあらかじめ作成しておく必要があります。

    {%N_DATA(QRコード読み取り1.注文番号)} 」 : 出力されるテキストファイル名です。QRコードから読み取ったデータの名前を指定します。ここでは、注文番号になっています。

    wfile.WriteLine ~」 : テキストに出力する内容です。ここではカンマ区切りで出力する記述になっています。項目名や、区切り文字などを変更すれば、カスタマイズができます。

    スクリプトのダウンロード

    script.zip

  • point3

    次に、右上の処理名から、「文書移動」を選択して、処理追加します。 設定一覧の「設定1」に「文書移動1」が追加されます。

    「移動先フォルダ」には、以下のように入力します。

    C:\Test\保存\{%DATE(yyyy)}\{%DATE(mm)}\

    実行時には {%DATE(yyyy)} の部分が年に、 {%DATE(mm)} の部分が月に置き換わります。

    また、ファイル名に、QRコードの名前付きデータ「注文番号」の内容を付けたいので、「ファイル名をリネームする」にチェックをいれ、ファイル名の欄に、

    {%N_DATA(QRコード読み取り1.注文番号)}.xdw
    

    と入力します。

    名前付きデータ「注文番号」の内容が「01234」の場合、付与されるファイル名は、「01234.xdw」となります。

    ここまでの設定で、QRコードを読み取り、QRコードの内容にしたがってフォルダ配信を行うことができます。 但し、QRコードが読み取れない場合、エラーになり、文書がそのまま残ってしまいます。

    この処理をDocuWorksDeskのサムネイル画面から行う場合は、文書が残るのをユーザが確認できますので、問題ないですが、フォルダ監視で自動化する場合には、「設定例2:QRコードの内容をDocuWorks文書のユーザ定義属性に設定する方法」の後半の エラー処理 を参照して、エラー文書の移動設定を行ってください。

実行

実行すると以下のような結果になります。

保存フォルダの下に2005\04フォルダが作成され、2つの文書が移動されます。ファイル名には、注文番号が付与されています。

データフォルダには、2つのテキストファイルが作成されています。中身はそれぞれ、QRコードの内容がカンマ区切りで出力されています。

注意:このスクリプトサンプルでは、1文書につき、一つのQRコードしか検出しません。複数ページが束になった文書を処理しても、正常に動作いたしません。