【Power Automate Desktop(無償版)】Outlookで受信したメールの添付ファイルを定期的にPCの特定フォルダに保存する。
- 1.やりたいこと
- 2.実践① フロー作成~Outlookメール取得・添付ファイル保存
- 3.実践② 保存先フォルダの重複ファイル削除
- 4.実践③ ループの次回実行時間設定〜現在時刻の取得、トリガー設定
- 5.フローの実行
- 6.さいごに
1.やりたいこと
全体としてやりたいことは下図の通りとなりますが、今回説明するのは下図真ん中の黄色部分で、これをPowerAutomateDesktopでフローを作成して実行します。
前提条件としてOutlookで受信する添付エクセルファイルは固定のフォーマットですが、ファイル名は異なるものとします。
(例:Testファイル_A部門.xlsx / Testファイル_B部門.xlsx ・・等)
2.実践① フロー作成~Outlookメール取得・添付ファイル保存
まず、PowerAutomateDesktopを起動し、新しいフローをクリックして任意のフロー名を入力し、 作成 をクリックします。
(画面左の)アクション → ループ → ループ条件 をクリックします。
今回は、一度実行したら手動でフローを停止しない限りずっとループさせたいので、全体のループ条件は下図の通り1=1とします。
アクション → 日時 → 現在の日時(アクション開始時の日時とする)を取得します をクリックします。
取得:タイムゾーン:はデフォルトのままとします。生成された変数はデフォルトでCurrentDateTime が入りますが、これをクリックして%RunDateTime%に変更します。この名称はなんでもよいのですが、デフォルトのCurrentDateTime は後ほど別のアクションで使いますので変更しておいてください。
アクション → Outlook → Outlookを起動します をクリックします。
生成された変数はデフォルトの %OutlookInstance% のままとします。
アクション → Outlook → Outlookからメール メッセージを取得します をクリックします。
前々画面で生成した変数(変数を入力するときは変数名を%で囲います)
アカウント:
自身のメールアカウント
メールフォルダ:
取得する対象のフォルダ
今回は、Inboxフォルダの中のTestという名前のフォルダから取得します。
取得: 〜 本文に次が含まれてます:
ここは必要に応じて設定/変更して下さい。これらの項目でメールボックス
内の大量のメールから対象のメールを絞り込むことが出来ますが、今回
はOutlook側のメールルールで予めメールボックス(Test)に対象を集約して
います。
添付ファイル:
「添付ファイルを保存します」 を選択します。
添付ファイルを次に保存します:
保存先のパスを入力します。(※補足参照)
※補足)
前述の保存先パスについては下図のように対象のフォルダ(又はファイル)を選択した状態でShiftキーを押しながら右クリックすると、「パスのコピー」が出ます。これをクリックするとパスがクリップボードにコピーされるので便利です。但し、そのまま貼り付けた場合、頭と末尾に ” が付加されますのでこれは削除するようにしてください。
3.実践② 保存先フォルダの重複ファイル削除
前述までのフローをループさせた場合、つまり特定のフォルダにファイルを保存後、再度同じフォルダに同じ名称のファイルを保存するフローを実行した場合、元のファイル名の末尾に(2)が付いたファイルが新たに保存されてしまいます。これを回避するために次のアクションを入れます。
アクション → フォルダ → フォルダ内のファイルを取得 をクリックする。
フォルダ:
対象フォルダのパスを入力。ファイル保存先のフォルダとなる。
ファイルフィルター:
*(2)*
生成された変数
デフォルトのFiles のままとする。これにより変数Filesにこのフォルダ内
で(2)を名称に含むファイルが取得される。
アクション → ファイル → ファイルの削除 をクリックする。
削除するファイル: 先ほどの変数%Files%を入力
4.実践③ ループの次回実行時間設定〜現在時刻の取得、トリガー設定
アクション → 日時 → 加算する日時 をクリックする。
日時: 加算するもととなる日時を設定します。最初のアクション開始時に設定した
変数 %RunDateTime% を入力します。
加算: 上記日時に加算する時間を設定します。今回は最初のアクション開始時から
60秒後に次のアクションを実行する設定とします。
生成された変数
デフォルトでResultedDateが入ります、このままでも構いません が、ここで
は %ReactionDateTime% に変更します。
次に次回のアクションを実行するためのトリガーを設定します。
アクション → ループ → ループ条件 をクリックします。
最初のオペランド: 先ほどの%ReactionDateTime% とします。
演算子: 「より大きい(>)」 を選択します。
2番目のオペランド: %CurrentDateTime% を入力します。
上記ループ条件を保存すると、下図のようなエラーが発生します。この時点ではCurrentDateTimeという変数は存在していないためです。一旦放置して次に進みます。
アクション → 日時 → 現在の日時を取得します をクリックします。
取得:タイムゾーンはデフォルトのままとします。ここで変数CurrentDateTimeがデフォルトで出てきますのでそのまま保存します。これで先ほどのエラーは消えたはずです。
先ほど設定したループ条件の内容を訳すと、
ReactionDateTime(アクションの最初の時間から60秒後の時間)が
CurrentDateTime(現在の時間)を超えた時点で
次のアクション(=一番最初のアクションの再実行)を実行する
ということになります。
このループを短時間で回し続けることによるPCへの負担を軽減するために次のアクションで一定の待ち時間を設定します。
アクション → 遅延 → Wait をクリックします。
今回は10秒(単位は秒です)で設定します。
ここまででフローの設定は完了です。
完成した全体のフローは下図の通りとなります。
5.フローの実行
出来上がったフローを実行してみようと思いますが、その前にOutlookのメールボックスとPCの保存先フォルダの状態を確認しておきます。
Inboxフォルダの中のTestフォルダに3件の未読メールがあり、それぞれのメールに以下の通り添付ファイルが付されている状態です。
件名:Test 1 添付ファイル名: Testファイル_A.xlsx
件名:Test 2 添付ファイル名: Testファイル_B.xlsx
件名:Test 3 添付ファイル名: Testファイル_C.xlsx
<PC保存先フォルダ>
Test保存フォルダ は空の状態です。
この状態で左上の実行ボタンをクリックし、フローを実行してみます。
フローが一巡すると、以下の通りTest保存フォルダに3つの添付ファイルが保存されました。60秒経過後に二巡目以降が実行されてもこの状態のままとなっています。新規メールを受信後にフロー が回った段階でファイルが追加されることになります。
6.さいごに
この仕組みを使えば、パワークエリを利用してPCフォルダ内のファイルからデータを集計・整形することが可能です。複数の相手先から収集するエクセルデータをいちいち開き、シート移動して串刺しにする必要もありません。また、途中段階での集計状況の確認も可能となります。
今回は以下の記事を参考にさせていただきました。ありがとうございました。