自社内で作成しているExcel文書を、DocuWorksプリンターに出力して作成されたXDW文書から、特定の文字を取得します。
取得した文字は、文書属性に登録したり、フォルダやファイル名に使用することができます。
今回作成した設定例では、「10_属性設定」フォルダに格納されたXDW文書から「項目名{[値]}」の文字を検索し、取得した文字を属性登録します。
検索して取得ができた場合は「15_属性設定済み」フォルダに、取得できなかった場合は「80_エラー」フォルダに文書を移動します。
また、属性取得ができた場合は、ファイル名を「申請日 + "_" + 申請者 + ".xdw"」に変更します。エラーになったファイルは、取得できなかった項目名をファイル名の先頭に付加して、「項目名 + "取得エラー_" + 元の文書名」とします。
Excel文書をDocuWorksプリンターに印刷をして作成されたXDW文書は、テキスト情報を保持しています。しかし、DocuWorksAPIで取得できるテキストは、文字が全て繋がった状態になっています。(改行は削除されています。)
また、文字の順番は見た目上の左上からではなく、セル単位で前後するので、正規表現を使っても目的の文字を特定出来ない場合があります。
そのため、XDW文書から特定の文字を取り出すには、Excel文書に項目名と値を決まった書式で記述する必要があります。
今回作成した設定では、以下のような書式の文字が文書中にあることとします。
項目名1{[値1]} 項目名2{[値2]} 項目名3{[値3]} ・・・
Excelの文書中の取り出しを行いたい項目を、上記の様な書式で記述するために、A1セルに、以下のセル参照を記述しました。
="申請者{[" & E5 & "]} 申請日{[" & IF(T5="","",TEXT(T5,"yyyy/mm/dd")) & "]} 件名{[" & E8 & "]}"
この参照は印刷される文字として出力されますが、印刷されたときに見えないように文字の色を白にしています。
白文字の参照セルはページからはみ出るとデータが消えることがあります。文字の大きさを小さくしたり、参照セルを複数に分けるなどしてページからはみ出ないように調整してください。
セルの書式が日付の場合、そのままセルを参照すると、日付を表す数値が取得されてしまいます。印刷する文字は、日付書式(yyyy/mm/dd)で出力したいので、TEXT関数を使って日付をフォーマットします。
また、日付形式のセルが空の場合に、空文字を出力したいので、IF関数を使っています。
IF(T5="","",TEXT(T5,"yyyy/mm/dd"))
設定ファイルは、メニューのファイルの「設定ファイルのフォルダを開く」から開いたフォルダに配置されています。以下のファイルをダウンロードして、上書きするだけで簡単に設定が完了します。(上書きする際は、eDocArrangementを終了した状態で行ってください。)
「{%GET_GLOBAL_DATA(TopFolder)}\10_属性設定」フォルダを監視します。
正規表現を使って、「項目名{[値]}」のような文字を検索します。項目名は「(申請者|申請日|件名)」のように正規表現のORを使って列挙します。
以下の内容でOCR読み取りを行います。
ページ「1」を処理する。
正規表現「/(申請者|申請日|件名)\{\[.*?\]\}/g」でマッチオールによる検索を行う。
OCR処理を行わずテキスト抽出のみ行う。
OCR読み取りで取得したテキストから、項目名と値を取り出して、ユーザーデータと文書属性に保存します。
以下のマクロを実行する。
#すべての属性を設定 {%LOOP L1 {%SYMBOL_COUNT(OCR読み取り1)}( {%SET_USER_DATA(属性,{%REGEX_CAPTURE((.+?)\{\[.*?\]\},{%P_DATA(OCR読み取り1.[L_IDX(L1)])})},{%REGEX_CAPTURE(.+?\{\[(.*?)\]\},{%P_DATA(OCR読み取り1.[L_IDX(L1)])})})} {%IF({%REGEX_CAPTURE(.+?\{\[(.*?)\]\},{%P_DATA(OCR読み取り1.[L_IDX(L1)])})}=, , {%DW_SET_USER_ATTRIBUTE({%REGEX_CAPTURE((.+?)\{\[.*?\]\},{%P_DATA(OCR読み取り1.[L_IDX(L1)])})},{%REGEX_CAPTURE(.+?\{\[(.*?)\]\},{%P_DATA(OCR読み取り1.[L_IDX(L1)])})})} )} )}
属性が取得できたかを判定します。「{%SET_USER_DATA(必須項目,申請者,)} 」のように、必須項目の項目名をユーザーデータのキーとしてセットして、直後のループ処理で項目が取得できたかチェックしています。
以下のマクロを実行する。
{%SET_USER_DATA(wk,結果,True)} {%SET_USER_DATA(必須項目,申請者,)} {%SET_USER_DATA(必須項目,申請日,)} {%SET_USER_DATA(必須項目,件名,)} #-- {%LOOP L1 {%GET_USER_DATA_COUNT(必須項目)}( {%IF({%GET_USER_DATA(属性,{%GET_USER_DATA_KEY_BY_NUMBER(必須項目,[L_IDX(L1)])})}=, {%SET_USER_DATA(wk,結果,False)} {%SET_USER_DATA(wk,エラー内容,{%GET_USER_DATA_KEY_BY_NUMBER(必須項目,[L_IDX(L1)])}取得エラー)} ,)} )}
文書を「{%GET_GLOBAL_DATA(TopFolder)}\15_属性設定済み 」に移動する。
ファイル名を「{%GET_USER_DATA(属性,申請日)}_{%GET_USER_DATA(属性,申請者)}.xdw」に変更する。
移動先に同名の文書がある場合は、ファイル名に連番を付加する。
この処理は「{%GET_USER_DATA(wk,結果)}」がTrueの場合に実行する。
文書を「{%GET_GLOBAL_DATA(TopFolder)}\80_エラー 」に移動する。
ファイル名を「{%GET_USER_DATA(wk,エラー内容)}_{%FILE_NAME}」に変更する。
移動先に同名の文書がある場合は、ファイル名に連番を付加する。
フォルダ構成は以下の通りです。
グローバルデータの内容は以下の通りです。トップフォルダを変更する場合は、以下の定義を変更してください。グローバルデータは、メニューのツールのグローバルデータの設定から変更できます。
名前 | 値 |
---|---|
TopFolder | C:\Home\Demo\属性設定 |