WinAutomationでメール配信を自動で行ってくれるロボットを作成していきます。

 

作成するロボット

 

決められた日付に、決められた文章でのメール配信を自動で行ってくれるロボットを作成します。

 

ロボットの流れ

・指定されたタイミングで自動的に起動する
・Excelを開いてデータを読み取る
・読み取った明細の日付をチェックする
・今日が配信予定の明細を見つけるとその内容を指定された宛先に配信する
・明細に添付ファイルがあれば添付する

利用シーン

・月末に経理資料の提出を子会社にメールで依頼する

 

こんな処理の作成方法を学べます

このロボットを作成する過程で、以下の処理を使います。カッコ内は実際にWinAutomationで使用するアクションの名前です。

・Excelからのデータ読み取り(Read from Excel Worksheet)
・繰り返し処理(For Each)
・メール送信(Send Email)
・ロボット実行日取得(Get Current Date and Time)

実際に作ってみましょう

手順1 準備

今回のロボットではExcelファイルをインプットデータとして使用します。
以下のリンクよりファイルをダウンロードし、
デスクトップに「メール配信テンプレート.xlsx」という名前で保存してください。

ここからダウンロード

また、メールの送受信を行います。テストで利用可能なGmailのメールアカウントを準備してください。

Excelの中身は下図のようにしてください。
A列の配信日にはどれでもいいので一つは当日の日付を入れてください。
C列のメール本文は任意の文字で結構です。また、F列はテスト用のメールアドレスを設定してください

準備ができたら、ロボットを新規作成して開始します。

手順2 使用する値を変数に代入

よく使用する値は最初に変数に代入しておくと便利です。今回は以下の2つの変数を設定します。

・読み込むExcelのファイルパス
・読み込むExcelのシート名

まず読み込むExcelのファイルパスを変数に代入します。
「Set Variable」を追加します。

プロパティ画面には、以下のように入力します。入力後「OK」を押してプロパティ画面を閉じてください。
Set Value : C:\Users\XXX\Desktop\メール配信テンプレート.xlsx
into Variables : %TemplateFilePath%

Set ValueにはExcelファイルのフルパスを入れてください。XXXの部分は使用しているPC環境に合わせてください。ファイルを選択してShiftを押しながら右クリック→「パスのコピー」からフルパスを取得することもできます。

into Variablesには値を代入する変数名を入れてください。変数名は%で囲む必要があります。

 

次に、読み込むExcelのシート名を代入します。同様に「Set Variable」のアクションを追加し、プロパティ画面で以下のように設定します。

Set Value : 配信情報
into Variables : %TargetSheet%

 

手順3 Excelを開く

Excelを開くには「Launch Excel」のアクションを使用します。
「Launch Excel」のアクションを一番下に追加してください。

プロパティ画面には以下のとおり設定します。

Launch Excel : and open the following document
Document Path : %TemplateFilePath%
Store Excel Instance Into : %ExcelInstance%

「Launch Excel」 を「 and open the following document」とすると、「Document Path」で指定したファイルを開きます。
%TemplateFilePath%には、手順2で設定したデスクトップ上の「メール配信テンプレート.xlsx」のフルパスが設定されているので、これが開かれます。
また、「Store Excel Instance Into」で設定した変数にExcelが格納されます。この変数はExcelInstanceという型になります。
今後の処理では%ExcelInstance%を指定することで「メール配信テンプレート.xlsx」の操作を行えます。

デバッグ実行ボタンを押し、Excelが開くか確認してください。

 

手順4 Excelの最初の空白行を取得する

開いたExcelからデータを取得する際、取得するセルの範囲を指定する必要があります。
今回のようにExcelに何行のデータがあるかわからない場合には、
「Get First Free Row On Column from Excel Worksheet」のアクションを使用します。
このアクションは指定したExcelの列の中で、最初に空白となるセルの行を返してくれます。

「Get First Free Row On Column from Excel Worksheet」のアクションを一番下に追加し、
プロパティ画面で以下のとおり設定してください。

Excel Instance : %ExcelInstance%
Column : A
Store Column’s First Free Row into : %DateFirstFreeRow%

「Excel Instance」で対象のExcel、「Column」で空白セルを探す列を指定します。
最初に見つかった空白セルの行番号が「Store Column’s First Free Row into」で指定した変数に入ります。

これで「メール配信テンプレート.xlsx」のExcelのA列で最初に空白になるセルを取得し、
変数「%DateFirstFreeRow%」に格納できます。

 

手順5 Excelのデータを取得する

データ取得するセルの範囲が決まったら、「Read from Excel Worksheet」のアクションでデータを取得します。
「Read from Excel Worksheet」のアクションを一番下に追加し、プロパティ画面で以下のとおり設定してください。

Excel Instance : %ExcelInstance%
Retrieve : Values from a Range of Cells
Range Starts At :
Column : A
Row : 2
Range Ends At :
Column : F
Row : %DateFirstFreeRow-1%

Store Cell Value(s) into : %TemplateDataTable%

「Excel Instance」で対象のExcelを指定します。
Retrieveを「Values from a Range of Cells」にすると複数セルの値を一度に取得できます。
取得した値は「Store Cell Value(s) into」で指定した変数にDataTable型(二次元配列)で格納されます。
「Range Starts At 」に開始セル、「Range Ends At 」に終了セルを指定します。

今回の場合、列は決まっているのでA~F列としています。
1行目はヘッダ情報なので不要なため、開始行は2行目としています。
終了行は「%DateFirstFreeRow-1%」としています。これは「%DateFirstFreeRow%」の変数の値から1を引いた値という意味になります。
「%DateFirstFreeRow%」は手順4で最初の空白行を取得した値が入っています。
つまり、「%DateFirstFreeRow-1%」はデータの最終行、ということになります。
これでExcelの値が「%TemplateDataTable%」という変数にDataTable型で格納されました。

DataTable型の変数から値を参照するときは「%変数名[行番号][列番号]%」と書きます。
行番号と列番号は0から始まる点に注意してください。
例えば「%TemplateDataTable[1][2]%」は「%TemplateDataTable%」の2行目、3列目の値のことです。

ここまで作成したら、Excelのデータが正しく取得できているか確認しましょう。
「Display Message」のアクションを一番下に追加し、プロパティ画面で「Message to Display」に「%TemplateDataTable[1][2]%」と入れOKを押してください。

Robot DesignerのStartボタンを押し以下の画面のように表示されれば成功です。
「メール配信テンプレート.xlsx」の2件目の情報の3列目の値、つまりセルC3のテキストが表示されます。

問題なければ「Display Message」のアクションを削除し、次に進んでください。

手順6 Excelのシートを設定する

「Get First Free Row On Column from Excel Worksheet」や「Read from Excel Worksheet」のアクションでは、どのExcelに書き込むかを「Excel Instance」で指定しますが、
どのシートに書き込むかを指定する項目がありません。対象Excel内でアクティブになっているシートに対して処理が行われます。
そのため、操作を行う前に対象シートをアクティブにしましょう。

「Set Active Excel Worksheet」のアクションをドラッグし、
「Launch Excel」と「Get First Free Row On Column from Excel Worksheet」のアクションの間にドロップしてください。
プロパティ画面は以下のとおり設定してください。

Excel Instance : %ExcelInstance%
Activate Worksheet with : Name
Worksheet Name : %TargetSheet%

「Activate Worksheet with」をNameにすると、指定した名前のシートをアクティブにできます。
これで手順2で%TargetSheet%に設定した「配信情報」という名前のシートがアクティブになり、
以降の処理で「配信情報」のシートに対して処理が行われるようになります。

手順7 Excelのデータを列ごとに処理する

Excelから取得したデータを1行ごとに処理したい場合には「Loop」のアクションを使用します。
「Loop」のアクションを一番下に追加し、以下のとおり設定してください。

Start From : 0
End To : %TemplateDataTable.RowCount-1%
Increment By : 1

Store Current Index into : %TemplateDataTableRow%

「Start From 」から「End To」の間を「Increment By」の数ずつ増やしながら処理します。
現在の値は「Store Current Index into」で指定した変数に格納されます。

「%TemplateDataTable.RowCount%」は「%TemplateDataTable%」の行数です。
テーブルの行番号と列番号は0から始まるので、「Start From」を0、「End To」を「%TemplateDataTable.RowCount-1%」
としています。
これでループ内で「%TemplateDataTable[TemplateDataTableRow][0]%」と書くと、
DataTableの1列目の値がループごとに順に取得できます。
DataTableの1列目は「メール配信テンプレート.xlsx」の配信日の列にあたります。

手順8 現在日を取得する

今回のロボットでは、Excelの配信日と現在日(ロボットの実行日)を比較し、同じであればメールを送信します。
現在日の取得は「Get Current Date and Time」のアクションを使用します。

「Get Current Date and Time」のアクションを一番上に追加し、以下のとおり設定してください。

Retrieve : Current Date Only

Store Retrived DateTime into : %CurrentDate%

「Retrieve」で時間まで取得する「Current Date and Time」か日付のみを取得する「Current Date only」か選択できます。
今回は日付のみの比較ですので、「Current Date only」で良いでしょう。
取得した現在日は「Store Retrieved DateTime into」で指定した変数にDateTime Value型として格納されます。

手順9 Excelの値と現在日を比較する

「Excelの配信日と現在日を比較し、同じであればメールを送信する。」という条件分岐の処理をループ内に追加します。
条件分岐には「If」のアクションを使用します。
「If」アクションを「Loop」と「End Loop」のアクションの間にドラッグ&ドロップし、プロパティ画面で以下のとおり設定してください。

First Operand : %TemplateDataTable[TemplateDataTableRow][0]%
Operator : =
Second Operand : %CurrentDate%

「First Operand」と「Second Operand」の値を比較し、条件を満たしていれば「If」アクション内の処理を行います。

%TemplateDataTable[TemplateDataTableRow][0]%はExcelの配信日の値、%CurrentDate% は現在日です。
これらが一致した際に、「If」アクション内の処理が行われるようになります。

手順10 メールを送信する

メールを送信するには「Send Email」のアクションを使用します。
「Send Email」のアクションを「If」と「End If」のアクションの間にドラッグ&ドロップしてください。

プロパティ画面ではメールアカウントの情報を設定します。例としてGmailを利用する場合は以下の設定になります。メールアカウントやメールサーバに合わせて適宜書き換えてください。

〇Generalタブ
From : XXX@gmail.com(テスト用アカウント)
Sender Display Name : 本社経理
To : XXX@gmail.com(テスト用アカウント)
CC :
BCC : %TemplateDataTable[TemplateDataTableRow][5]%
Subject : %TemplateDataTable[TemplateDataTableRow][1]%
Body : %TemplateDataTable[TemplateDataTableRow][2]%
Attachment(s) : %TemplateDataTable[TemplateDataTableRow][4]%

BCC、Subject、Body、Attachment(s)には対応する%TemplateDataTable%の値を設定します。

 

〇SMTP Serverタブ
SMTP Server : smtp.gmail.com
Server Port : 587
Enable SSL : チェックを入れる

SMTP Server needs authentication : チェックを入れる
User Name : XXX@gmail.com(テスト用アカウント)
Enter Password : Directly
Password : テスト用アカウントのパスワードを入力

手順11 Excelを閉じる

ロボットの処理の終わりには開いていたExcelを閉じるようにしましょう。
「Close Excel」のアクションを一番下に追加し、以下のとおり設定してください。

Excel Instance : %Excel Instance%
Before Closing Excel : %Do not save Document%

手順12 実行

ここまで組めたらRobot DesignerのStartボタンを押し実行してみましょう。
メールが送信されれば成功です。

 

こんな応用ができます

・メール送信アカウントの切り替え
→メール設定情報をExcelに記載し、WinAutomationで読み取ります。
「Send Email」のアクションのプロパティは変数で設定します。

・添付ファイルをパスワードをつけて送信、パスワードも別途メール送信
→添付ファイルを送る前にランダムに生成されたパスワードをかけてZIP圧縮します。
圧縮後のファイルパスを「Send Email」のアクションのAttachment(s)に設定しメール送信します。
送信後、パスワードを案内するメールを自動送信します。