eDocArrangementを使った自動処理入門

業務での利用
Using at work

業務でeDocArrangementを使う方法で、一番のお奨めはフォルダ監視による自動処理です。

他には、DocuWorks DeskのプラグインからeDocArrangementの処理を呼び出す方法もあります。

フォルダ監視の場合、サーバー1台のみに設定をすればいいので、導入コストを抑えることができ、設置やメンテナンスが簡単である、という利点があります。

プラグインを使う構成は、利用者のPC全てにeDocArrangementをインストールして設定する必要があるため、導入やメンテナンスに手間がかかることに加え、追加ライセンスの購入が必要となりますので、導入時のコストがアップします。

フォルダ監視で自動処理
Automatic processing

eDocArrangementをサーバーにインストールします。ローカルフォルダを監視して、処理後に処理済みフォルダに移動する設定を行います。

フォルダを共有すれば、複数のユーザーがフォルダにファイルを入れるだけで処理が行われ、処理後のフォルダから結果を確認することができます。

以下の図では、共有フォルダ「10_受付」に文書を入れると、連番ファイルから連番を取得、貼り付けして、「20_処理済」フォルダに移動する、という処理を表しています。

注文書 9 申し込み書 プランA
フォルダ監視
参照/更新
連番ファイル
サーバー
10_受付
連番貼付け
20_処理済
0001
20190615_0001.xdw
移動
PC
文書1.xdw

eDocArrangementはサービスで実行可能なので、ログオフした状態で監視処理を行うことが可能です。

フォルダ監視時のファイルの処理順について

eDocArrangementのフォルダ自動監視時におけるファイルの処理順の仕組みにについて説明します。

例えば、以下の様な複数のファイルを選択してドラッグでフォルダにドラッグ&ドロップした場合の処理順について説明します。

a.xdw

b.xdw

c.xdw

これらを選択してフォルダにドラッグ&ドロップした場合、どのような順でコピーされるかを知る事・決める事はできません。なぜなら、ファイルの移動はWindowsのエクスプローラーというプログラムが行っているからです。

アレンジメントの処理順については、設定で並び変えの指定を行わないと、ファイルの存在順に処理が行われると想定されます。存在順というのも、ファイルシステム上での存在順になるので、Windowsのファイルシステムが決める順番です。従って、それもはっきりと知る事・決める事はできません。

そのような問題に対処するためには、アレンジメントの「ファイルの並び変え」という機能を利用できます。 監視で取得したファイルリストを、処理前にファイル名や更新日で並び変えることができる機能です。

但し、この並び変えも、監視時にフォルダにあるファイルに対して処理が行われるので、並び変えを行いたいファイル全てがフォルダ内に揃っていることが条件となります。

そのため、以下の様なケースが発生します。

エクスプローラーで、3つのファイルを全て選択して移動したとしても、実際には、ファイルが同時に移動されるわけではなく、1つづつ順番に移動されます。

例えば、先ほど例に挙げた3つのファイルがあり、

c.xdw

a.xdw

b.xdw

の順に移動されたとします。この時、

  c.xdw

  a.xdw

が移動された瞬間にアレンジメントの監視処理が動作すると、c.xdw、a.xdwを対象に並び変えを行い、

  a.xdw

  c.xdw

の順に処理が行われます。

その後、

b.xdw

が次の監視処理で処理されます。

並び変えは、それぞれの監視処理時に行われますが、2回の監視処理に分かれてしまうと、並び変えの処理を行ったとしても、結果的に、

  a.xdw

  c.xdw

  b.xdw

の順に処理してしまうケースが発生します。

これを防ぐ方法については、以下の 「プラグインで処理実行」 項をご参照下さい。

フォルダ構成について

フォルダ構成は以下の様に作成します。

この例では、「10_受付」フォルダにファイルを格納すると、連番を文書に貼り付けて、「20_処理済」フォルダに移動するという処理を想定しています。

  • C:\Home\富士ゼロックス_20190615
    • 10_受付
      監視フォルダ。
      • 文書-1.xdw
        入力ファイル。
    • 20_処理済
      処理済みファイルの移動先。
      • 20190615_0001.xdw
        「処理年月日 + "_" + 受付番号(4桁ゼロ埋め) + ".xdw"」にリネームする。
    • 90_System
      eDocArrangementが使用するフォルダ。必要なファイルや、ログファイルを出力するフォルダ等を用意する。
      • 10_連番
        • 受付番号.txt
          連番管理ファイル。
      • 90_Log
        ログの出力先。

プラグインで処理実行
Manual Processing with plug in

上記 「フォルダ監視時のファイルの処理順について」 項のように、フォルダを監視→自動処理という設定においては、複数のファイルを一つのまとまりとして処理したい場合に、全てのファイルがフォルダに入りきる前のタイミングで処理が行われることもあります。

このような問題に対処するためには、プラグインからの実行が有効です。ユーザーがファイルを選択して任意のタイミングで実行できるため、複数のファイルをセットで処理することが可能となります。

PC
参照
連番ファイル
DocuWorks Desk
eDocArrangement
プラグインボタン
更新
文書1.xdw
文書2.xdw
連番貼付け
0001
20190615_0001.xdw
0002
20190615_0002.xdw

また、ファイル移動が不要な場合にも、プラグインでの処理実行が有効です。

「フォルダ監視で自動処理の設定」のままで、上記の問題を解決するためには、「すべてのファイルが揃った」事を意味する「end.txt」を用いる方法があります。

eDocArrangementで所定のフォルダに「end.txt」が存在する場合のみ監視および処理を行う、ということができます。

ユーザーは、複数でひとまとまりのファイルが揃ったら「end.txt」をフォルダに格納します。その時点で、監視が始まり、処理が実行しされます。

また、もう一つの方法として、監視時間設定を業務終了時にする、という方法も有効です。

事例
Examples

eDocArrangementを使った自動処理の過去の事例を紹介します。

XDW文書からのテキスト抽出

Excelなどから直接DocuWorksプリンタに出力して作成されたXDW文書は、テキスト情報を保持していますので、eDocArrangementからそのテキスト情報を取得することが可能です。

ただし、文書内の改行は削除されてしまい、すべての文字が繋がった状態で取得されます。

また、テキスト情報は印刷時の見た目の並びと異なる場合があります。

例えば、以下の様に「番号:123456」という文字をPowerPointとExcelで作成して、DocuWorksプリンターに印刷してXDW文書を作成します。

その際にPowerPointでは、最初に「123456」を入力して、次に「番号:」を入力してみてください。

すると、XDW文書から取得できる文字(全選択してコピー後メモ帳に貼り付けた文字)は、Excelから印刷したものは、「番号:123456」となりますが、PowerPointから印刷したものは、「123456番号:」となります。

これはPowerPointがプリンターにデータを送信する際に、画面上の左上からの位置の順ではなくて、入力された順にデータと座標位置を送信しているからと考えられます。

このようにアプリケーションからプリンターに送信されるデータは、アプリケーション毎に異なり、DocuWorksプリンターから作成されるXDW文書からは、データの送信順でテキスト情報が取得されると考えられます。

DW Viewerで文字を全選択してコピーした文字から改行を削除したテキスト情報が、実際に取得される文字に近いので、確認してみてください。

ユーザー様のシステム等から出力して作成されたXDW文書は、システムの帳票出力プログラムが変わると、出力されるテキストの並び順等が変わる可能性があります。テキスト抽出では、前後の文字を正規表現で判定して項目取得するので、並び順が変わると取得できなくなり、業務が継続できない事態となる可能性があります。そのリスクについてユーザー様に説明を行い承認いただく必要があると思います。

イメージXDW文書をOCRして文字取得

FAXやスキャンから作成されたXDW文書をOCRして文字情報を取得できます。OCRはeDocArragementからDocuWorksのOCRの機能を呼び出して利用することが可能です。

DocuWorks Ver.9をインストールした場合は、イメージ文書のOCR読み取りは、DocuWorksAPIの制限により機能しません。

富士フイルムビジネスイノベーション株式会社様から、制限解除のライセンス商品が提供されております。ライセンス商品を購入後、登録を行うとOCR読み取りが機能するようになります。 詳細はeDocArrangement WebSiteの動作環境のソフトウエアの欄を参照してください。

OCRはページ全体か、範囲を矩形で指定(複数可)して文字読み取りした結果のテキストを正規表現で取得することが可能です。

eDocArrangementにてよく使う正規表現については、「設定」ページの 正規表現について をご参照下さい。

OCRは誤認することがあるので、処理後のデータを人の目で確認する必要があります。この件については、ユーザー様に仕組みをご説明して承認してもらう必要があります。また、誤認率については、デモ環境を使って、実際の帳票で事前に調査を行う必要があります。場合によっては使い物にならない可能性もあり、事前の調査とユーザー様の承認が必須となります。

XDW文書からQRコード読み取り

XDW文書からページに印刷されたQRコードを読み取って、文字情報を取得することができます。

QRコードの大きさについて。eDocArrangementのQRコード読み取りは、ページをイメージ変換した1枚の静止画像から取得するため、スマートフォンのカメラのような動画で取得するほどの読み取り性能はありません。

そのため、QRコードを大きめで鮮明に印刷されるように調整する必要があります。大きさは、QRコードの1ドットの大きさが0.5mm~1mmほどが推奨値です。また、20文字程度の文字を誤り補正Mで作成したQRコードは、2cm~3cmほどが推奨値です。但し、これは参考値であり、印刷品質や、スキャン時の紙の状態、読み取り精度等で変化するため、実際の環境でトライ&エラーを繰り返し、調整する必要があります。

QRコードは読み取りできない場合があるので、処理後のデータを人の目で確認する必要があります。この件については、ユーザー様に仕組みをご説明して承認してもらう必要があります。また、誤認率については、デモ環境を使って、実際の帳票で事前に調査を行う必要があります。場合によっては使い物にならない可能性もあり、事前の調査とユーザー様の承認が必須となります。

CSVファイルの読み取りと出力

eDocArrangementでは、マクロを使って、CSVファイルを読み取ったり、出力したりできます。

ですが、CSVファイルの扱いは意外に難しい部分があります。

CSVは簡単に言うと、項目をカンマで区切ったテキストファイルです。しかし、細かい仕様として以下の様なものがあります。

  • データ中にカンマがある場合はダブルクォートで囲う。

    商品1,"1,000"
    商品2,"5,700"

  • データ中に改行がある場合はダブルクォートで囲う。

    商品1,"確認済み
    25日着"
    商品2,"未確認
    26日着"

  • データ中にダブルクォートそのものを含める場合は、ダブルクォートを2つ連続で記述する。(読み込むアプリケーションが""を”にして読み込む。)

    A0001,"""おいしい""飴"
    A0002,"みかん""まるごと””アイス"

上記のような仕様を、CSVを出力するアプリケーションと、CSVを読み込むアプリケーションが正しく処理する必要がありますが、プログラマが実装するかどうかで変わってしまい、これらの仕様通りになっていない場合も多くあります。

CSVファイルがどのように作成されたか?

ユーザー様から、CSVファイルを読み取って処理してほしいと言われた場合、CSVファイルがどのように作成されたかを確認します。

  • 基幹システムなどのプログラムから出力されたCSV

    データ中にカンマや改行、ダブルクォートが含まれる可能性があるか調べて、ある場合は、上記の仕様通りの処理がされているか確認する。確認できない場合は、実際にデータを入力するなどして、CSVファイルがどのように出力されるか調べる。
  • Excelで名前を付けて保存から作成されたCSV

    以下、参照。

Excelで作成したシンプルな表をCSVで保存したファイルを、eDocArrangementで読み込む事ができます。但し、以下について注意が必要です。

  • セルの表示形式を正しく設定する。

    セルの表示形式を自動にしておくと、入力時に数字だけのデータは数字とみなされて先頭の0が削除されてしまいます。例えば、電話番号で「09012345555」は「9012345555」となってしまいます。そのため、表示形式は文字列としてください。

  • 日付の場合は、表示形式をユーザー定義にして、「yyyy/mm/dd」としてください。

  • セルに入力する文字は、できるだけカンマや改行を入れないルールにしてください。

    セルに,や改行があると、CSVに出力される際に""で囲まれたデータとなります。そのようなデータは、通常のテキスト読み込みで処理ができません。eDocArrangementでは、そのようなCSVファイルを読み込むマクロ(CSV_FILE_READ)が用意されていますが、仕様を理解して使う必要があります。CSV_FILE_READマクロを使えば、問題なく処理可能です。

eDocArrangementで処理されたCSVファイルを参照する場合

  • 基幹システムなどのプログラムで読み込む

    eDocArrangementでは、出力するCSVの内容をマクロで加工することができますので、ある程度はCSVの仕様に準じて作成することが可能です。しかし、マクロの記述が複雑になっていきますので、可能であれば、データ中にカンマや改行がないCSVを扱う仕様とした方が良いです。
  • ExcelでCSVを読み込む

    以下、参照。

CSVをExcelで開いて保存すると、データが破損する可能性があります。Excelの仕様で以下のようなものがあります。

  • 先頭が0で始まる数字が削除されてしまう。

    数字だけのデータは数字とみなされて先頭の0が削除されてしまいます。例えば、電話番号で「09012345555」は「9012345555」となってしまいます。

  • 日付のような数字を読み込むと日付に変換されてしまう。

    「01-02」のようなデータを読み込むと「1月2日」として読み込んでしまい、そのまま保存すると、「1月2日」で保存されてしまいます。

実際の動きを見てみましょう。以下のExcel文書を作成します。Excelはセル毎にデータの型を持っています。見積もり番号、顧客名、商品型番は文字列、見積もり日は日付、金額は通貨となっています。

この文書をCSVで保存すると以下の様になります。金額の部分がデータ中にカンマを含むためダブルクォートで囲われています。

このCSVファイルをダブルクリックでExcelで開くと以下の様になります。

見積もり番号の先頭の0が削除され、商品型番の12-5は日付と判断されて12月5日となってしまいます。

ExcelはCSVファイルを開くのに適していない!

上記で述べたように、CSVファイルをExcelで開くと様々な問題が発生します。

ExcelはCSVファイルの読み書きができますが、色々なデータ変換が行われてしまい、その仕様を理解していないと問題となります。ExcelでCSVファイルを扱うこと自体が向いてないとも言えます。

CSVファイルは、文書ではなくデータと考えたほうがよいと思います。そのため、読み書きの処理でデータが変更されないようなアプリケーションで内容を確認することが良いと思います。

CSVファイルを読み書きできるアプリケーションは、テキストエディタや、CSVエディタ等があります。ネットで検索すれば、フリーウエアやシェアウエア等が見つかります。

しかし、企業では、それらのアプリケーションの認知度が低く、Excelを使っている現状があると思います。

でもExcelで開きたい!

様々な理由からExcelを使いたいということであれば、上記の仕様を理解して、一部制約が入りますが、それを容認できるのであれば、Excelを使うこともできると思います。

CSVファイルをExcelで開いた時に、文字として読み込む方法

Excelの正しい使い方としては、CSVファイルを読み込む場合は、インポート機能を使うことです。インポート機能ではデータが文字列なのか数字なのかを指定して読み込むことができます。最新のExcelでは、インポート機能も強化されていて、自動判定や色分けなどが行われます。

以下は、インポート機能を使ってCSVファイルを読み込んだ結果です。

金額のカンマがなくなっていますが、見積もり番号と商品型番をインポート時の画面で文字列としたことで、正しく読み込んでいます。

ですが、操作として手順が多くなるため、日々の業務では、やはりダブルクリックで開きたくなります。

そこで、CSVファイルを出力する際に、文字としてのデータを「="00001"」のように出力する方法を提案いたします。eDocArrangementでCSVファイルを出力する際に、文字列としたい項目を「="」と「"」で囲うようにします。

以下のようなCSVファイルであれば、ダブルクリックで開いても正しく読み込むことができます。

Test.csvをダブルクリックで開くと、Excelで以下のように表示されます。

但し、セルの見た目上は「00001」と表示されていますが、セルを編集すると「="00001"」が編集エリアに表示されます。

これが制約となりますが、出力された文字を編集することは少ないと思いますし、セルのコピーなどでは、セルに表示されている文字がコピーされるので、操作上の大きな問題はないかと思います。これらのExcelの挙動をユーザー様へ周知して、承諾して頂くと良いと思います。

ExcelファイルからCSVファイルを出力するスクリプト

ExcelファイルからCSVファイルを出力するスクリプトを書いてみました。Excelで文書を開いて「名前を付けて保存」で、CSVファイルに保存する処理を自動で行います。

以下のスクリプトをメモ帳に貼り付けて、「ExcelToCSV.vbs」で保存してください。使い方は、以下のスクリプトの最初に書いてあります。(実行するにはExcelがインストールされている必要があります。)

'-------------------------------------------------------------------------
'ExcelToCSV.vbs
'
'Excel文書をCSVファイルに変換します。
'入力のファイルと同じフォルダに拡張子を.csvにしたファイルを出力します。
'既にファイルが存在する場合は上書きします。
'
'例  test.xlsxと同じフォルダにtest.cvsを出力する場合
'ExcelToCSV.vbs C:\Home\temp\test.xlsx
'
'ExcelToCSV.vbsをデスクトップなどに配置して、Excelファイルを
'ExcelToCSV.vbsにD&Dしても実行できます。
'-------------------------------------------------------------------------
Option Explicit

'引数がない場合は終了
if Wscript.Arguments.Count = 0 then
    WScript.Quit
end if

dim objExcel
dim workbookCount
workbookCount = 0

'引数に渡されたファイルの数分繰り返す
do while workbookCount < Wscript.Arguments.Count

    'CSV形式で保存
    SaveCSV Wscript.Arguments(workbookCount)
    workbookCount = workbookCount + 1
loop

if IsObject(objExcel) then

    'エクセルを終了します
    objExcel.Quit
end if

sub SaveCSV(inputFileName)

    dim wkFileName
    dim xlCSV
    xlCSV = 6

    '.xlsx,.xls以外のファイルは処理しない
    if lcase(right(inputFileName,4)) <> "xlsx" and _
       lcase(right(inputFileName,3)) <> "xls" then
        exit sub
    end if

    'Excelオブジェクトがない場合
    if IsObject(objExcel) = false then

        'エクセルオブジェクトを作成
        set objExcel = CreateObject("Excel.Application")

        'エクセル画面を表示
        objExcel.Visible = True
    end if

    'ワークブックを開く
    objExcel.Workbooks.Open inputFileName

    '各種の確認ダイアログを非表示
    objExcel.DisplayAlerts = False

    'Excel文書名から、CSVファイル名を作成
    wkFileName = replace(inputFileName,".xlsx",".csv")
    wkFileName = replace(wkFileName,".xls",".csv")

    'アクティブシートをCSV形式で保存
    objExcel.ActiveSheet.SaveAs wkFileName, xlCSV

    'ワークブックを閉じる
    objExcel.Workbooks(1).Close
end sub