【RPA入門(5)】UiPathの使い方~正規表現を使って受信メールから情報を抽出

RPAの入門として、UiPathの実践的な使い方を紹介していきます。今回は正規表現を使って受信メールから情報を抽出する処理を自動化したいと思います。

正規表現を使って受信メールから情報を抽出

【Step.1】受信メールの作成

先ずは、下記のようなメールを、受信トレイの一番上に用意します。

mail

inbox

以降では正規表現を使って、受信メールに記載された「請求番号」「請求金額」「支払期限」の情報をそれぞれ抽出します。 

【Step.2】出力ファイルを作成

受信メールから抽出した情報を書き込むために、下記のようなExcelファイルを用意します。

create file

ファイル名は「出力ファイル.xlsx」、シート名は「Sheet1」としました。

【Step.3】UiPathを起動

先ずは、PCにインストールしているUiPathを起動して、空のプロジェクト(Blank)を作成します。

create project

【Step.4】受信メールを取得する

受信したメールを取得するアクティビティを追加します。

画面左側のアクティビティ検索窓に「mail」と入力します。表示された「Get IMAP Mail Messages」アクティビティを、ワークフロー内にドラッグ&ドロップします。

get mail

下表の通り、「Get IMAP Mail Messages」アクティビティのプロパティを設定します。

項目 備考
MailFolder “Inbox” 取得先のフォルダを指定します。デフォルトの受信トレイの場合は「Inbox」を指定します。
Port 993 ポート番号です。Gmailを使用する際は993を設定します。
Server “imap.gmail.com” サーバー情報です。Gmailを使用する際は、imap.gmail.comを設定します。
Email “XXXX@gmail.com” 受信アドレスです。XXXXには適切な値を入力してください。
Password “XXXXXXX” パスワードです。適切な値を入力してください。
OnlyUnreadMessages チェックなし 未読メールのみ取得する設定です。今回は既読メールを取得するので、チェックを外します。
Top 3 リストの一番上から取得するメールの件数です。今回は受信トレイの一番上から3件の既読メールを取得します。
Messages mails 取得したメール(複数件)を保存する変数です。新たな変数mailsを新規作成します。

※新規で変数を定義する際は、入力欄で「Ctrl + k」を押します。「Set Name:」と表示されるので、続けて変数名を入力してエンターキーで確定します。

今回はGmailを使用してメールを受信しますが、他のメールサーバーを使用する際は、ポート番号やサーバー情報などを適宜変更してください。

なお、Gmailを使用して受信メールを取得する場合は、下記の設定を事前に行っておく必要があります。

【Step.5】メールの本文を取り出す

Step.4で取得したメール(複数件)は変数mailsに保存されます。変数mailsは配列になっています。

下図を見てください。

mails

各メールの本文を参照するには、「mails(n).Body.ToString」と設定します。mails(n)で、受信トレイの一番上からn+1番目のメールを指定することができます。慣習的にnは0から数え始めます。

最後のToStringは、データの型を文字列に変換するメソッドです。この辺りは深く気にせずに、おまじないだと思って割り切りましょう。

今回は受信トレイの一番上にあるメールの本文を参照したいので、「mails(0).Body.ToString」となります。

以降の処理で、このメールの本文を何度も参照するため、新たな変数textを作成して、この変数textにメール本文の内容を保存しておきます。

画面左側のアクティビティ検索窓に「assign」と入力します。表示された「Assign」アクティビティを、「Get IMAP Mail Messages」アクティビティの下にドラッグ&ドロップします。

assign

「Assign」は変数に値を代入するアクティビティです。左側に変数textを定義して、右側に「mails(0).Body.ToString」を入力します。

※新規で変数を定義する際は、入力欄で「Ctrl + k」を押します。「Set Name:」と表示されるので、続けて変数名を入力してエンターキーで確定します。

【Step.6】正規表現で情報を抽出

では、メールの本文から「請求番号」「請求金額」「支払期限」の情報をそれぞれ抽出していきます。正規表現(パターンマッチング)の詳細については、Step.7で解説します。

■「請求番号」を抽出

メールの本文から「請求番号」を抽出します。

画面左側のアクティビティ検索窓に「match」と入力します。表示された「Matches」アクティビティを「Assign」の下にドラッグ&ドロップしましょう。

match number

下表の通り、「Matches」アクティビティのプロパティを設定します。

項目 備考
DisplayName 「請求番号」を抽出 アクティビティの表示名です。分かりやすい名前をつけておきましょう。
Input text 検索の対象となる文字列です。メールの本文が保存されている変数textを設定します。
Pattern “\r\n請求番号:((.*)-(.*))\r\n” 検索する文字列です。正規表現で記載します。
Result number 検索された文字列を保存する変数です。新たな変数numberを新規作成します。

※新規で変数を定義する際は、入力欄で「Ctrl + k」を押します。「Set Name:」と表示されるので、続けて変数名を入力してエンターキーで確定します。

■「請求金額」を抽出

次に、メールの本文から「請求金額」を抽出するために、「Matches」アクティビティを続けてドラッグ&ドロップします。

match price

下表の通り、「Matches」アクティビティのプロパティを設定します。

項目 備考
DisplayName 「請求金額」を抽出 アクティビティの表示名です。分かりやすい名前をつけておきましょう。
Input text 検索の対象となる文字列です。メールの本文が保存されている変数textを設定します。
Pattern “\r\n請求金額:(.*)円\r\n” 検索する文字列です。正規表現で記載します。
Result price 検索された文字列を保存する変数です。新たな変数priceを新規作成します。

■「支払期限」を抽出

最後に、メールの本文から「支払期限」を抽出するために、「Matches」アクティビティを続けてドラッグ&ドロップします。

match deadline

下表の通り、「Matches」アクティビティのプロパティを設定します。

項目 備考
DisplayName 「支払期限」を抽出 アクティビティの表示名です。分かりやすい名前をつけておきましょう。
Input text 検索の対象となる文字列です。メールの本文が保存されている変数textを設定します。
Pattern “\r\n支払期限:((.*)年(.*)月(.*)日)\r\n” 検索する文字列です。正規表現で記載します。
Result deadline 検索された文字列を保存する変数です。新たな変数deadlineを新規作成します。

これで、メールの本文から「請求番号」「請求金額」「支払期限」の情報をそれぞれ抽出することができます。

【Step.7】正規表現の解説

Step.6で登場した「Matches」アクティビティで使用する正規表現(Pattern)を解説します。

下図を見てください。

matched

正規表現による検索でマッチする文字列が一ヶ所だけと仮定すると、マッチした文字列は「変数名(0)」で参照することができます。

では、正規表現のパターンと、実際に検索でマッチする文字列の関係を解説していきます。

■「請求番号」

正規表現では、「\r\n請求番号:((.*)-(.*))\r\n」と表記します。下図を見てください。

number

正規表現のマッチングの精度を上げるために、検索対象(請求番号:2018-00123)の前後に改行文字が存在すると考えて取り扱います。正規表現では改行文字は「\r\n」と表記します。

請求番号の前半コード(2018)と後半コード(00123)の数字は、請求書によって変化します。そこで、これらの数字は、任意の文字が0個以上連続する文字列「.*」と表記します。

「.」は任意の1文字を表します。「*」は直前の文字が0個以上連続する文字列を表します。

なお、「.*」などを括弧()で括ることにより、後にGroupsメソッドで値を参照することができます。具体的には下表の通りです。Groups(0)は全体の値を参照します。

変数 参照値
number(0).Groups(0).ToString \r\n請求番号:2018-00123\r\n
number(0).Groups(1).ToString 2018-00123
number(0).Groups(2).ToString 2018
number(0).Groups(3).ToString 00123

■「請求金額」

正規表現では、「\r\n請求金額:(.*)円\r\n」と表記します。下図を見てください。

price

正規表現のマッチングの精度を上げるために、検索対象(請求金額:560,000円)の前後に改行文字が存在すると考えて取り扱います。正規表現では改行文字は「\r\n」と表記します。

請求金額(560,000)の数字は、請求書によって変化します。そこで、この数字は、任意の文字が0個以上連続する文字列「.*」と表記します。

「.」は任意の1文字を表します。「*」は直前の文字が0個以上連続する文字列を表します。

なお、「.*」を括弧()で括ることにより、後にGroupsメソッドで値を参照することができます。具体的には下表の通りです。Groups(0)は全体の値を参照します。

変数 参照値
price(0).Groups(0).ToString \r\n請求金額:560,000円\r\n
price(0).Groups(1).ToString 560,000

■「支払期限」

正規表現では、「\r\n支払期限:((.*)年(.*)月(.*)日)\r\n」と表記します。下図を見てください。

deadline

正規表現のマッチングの精度を上げるために、検索対象(支払期限:2018年11月30日)の前後に改行文字が存在すると考えて取り扱います。正規表現では改行文字は「\r\n」と表記します。

年月日の数字は、請求書によって変化します。そこで、この数字は、任意の文字が0個以上連続する文字列「.*」と表記します。

「.」は任意の1文字を表します。「*」は直前の文字が0個以上連続する文字列を表します。

なお、「.*」などを括弧()で括ることにより、後にGroupsメソッドで値を参照することができます。具体的には下表の通りです。Groups(0)は全体の値を参照します。

変数 参照値
deadline(0).Groups(0).ToString \r\n支払期限:2018年11月30日\r\n
deadline(0).Groups(1).ToString 2018年11月30日
deadline(0).Groups(2).ToString 2018
deadline(0).Groups(3).ToString 11
deadline(0).Groups(4).ToString 30

【Step.8】Excelファイルを開く

メールの本文から抽出した情報を出力するために、Step.2で作成したExcelファイルをUiPathで読込んでみたいと思います。

画面左側のアクティビティ検索窓に「excel」と入力します。表示された「Excel Application Scope」アクティビティを、ワークフローの最後にドラッグ&ドロップします。

open excel

そして、「Excel Application Scope」アクティビティのプロパティで、対象のExcelファイル名(今回は、出力ファイル.xlsx)を指定します。

※「Excel Application Scope」は対象のExcelファイルを開くアクティビティです。そして、アクティビティの中に表示されるDoコンテナの中に、対象ファイルに対して実行したい処理(アクティビティ)を追加していきます。

【Step.9】取得した情報をシートに書き込む

メールの本文から抽出した各情報を、Step.2で作成したExcelシートに順に書き込んでいきます。

■「請求番号」

先ずは「請求番号」を書き込みます。セルを指定してシートに書き込むために、「Write Cell」アクティビティを、Doコンテナの中にドラッグ&ドロップします。

write number

プロパティで、シート名(SheetName)を「”Sheet1″」に、セル(Range)を「”B1″」に設定します。シートに書き込む値(Value)を、「number(0).Groups(1).ToString」と設定します。

アクティビティ名(DisplayName)を『「請求番号」を記載』に変更しておきます。

■「請求金額」

次は「請求金額」を書き込みます。「Write Cell」アクティビティを続けてドラッグ&ドロップします。

write price

プロパティで、シート名(SheetName)を「”Sheet1″」に、セル(Range)を「”B2″」に設定します。シートに書き込む値(Value)を、「price(0).Groups(1).ToString」と設定します。

アクティビティ名(DisplayName)を『「請求金額」を記載』に変更しておきます。

■「支払期限」

最後は「支払期限」を書き込みます。「Write Cell」アクティビティを続けてドラッグ&ドロップします。

write deadline

プロパティで、シート名(SheetName)を「”Sheet1″」に、セル(Range)を「”B3″」に設定します。シートに書き込む値(Value)を、「deadline(0).Groups(1).ToString」と設定します。

アクティビティ名(DisplayName)を『「支払期限」を記載』に変更しておきます。

UiPathワークフローの実行

【Step.10】ワークフローの実行

それでは、上部パネルの「Run」をクリックし、このワークフローを実行してみましょう。

run

メールの本文から抽出した情報がExcelシートに正しく出力できました。

result

まとめ

今回は正規表現を使って受信メールから情報を抽出する処理を自動化しました。

下記の点を理解して、他の業務にも応用できるようにしましょう。

  • 「Get IMAP Mail Messages」を使った受信メールの取得
  • 「Matches」を使った正規表現による検索
  • 「Groups」メソッドを使用した参照
  • 「Excel Application Scope」を使ってExcelファイルを開く
  • 「WriteCell」を使ってセルの値を書き込む

最後に、UiPathに関する参考図書を一冊紹介しておきます。
できるUiPath 実践RPA <amazon.co.jp>

※本書の内容はネット上でも公開されているようです(できるネット)。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする