松本典子の「はじめよう!Azure Logic Apps/Power Automateでノーコード/ローコード」 第35回
ファイル名から拡張子を取り出して処理するフローを切り替える
受信メールの添付ファイルを種類に応じたフォルダに自動保存する
2024年03月06日 10時00分更新
こんにちは、Microsoft MVP(Azure / Business Applications)の松本典子です。
本連載の第3回記事 では、メールに添付されたファイルを、指定のフォルダーに自動保存する方法をご紹介しました。
ただし、この記事で紹介した方法では、すべてのファイルが指定のフォルダーに保存されていました。用途によっては「ファイルの種類に応じて保存フォルダーを変更したい」という場合もあると思います。
そこで今回は、添付ファイルの種類が「PDF」の場合と「その他」の場合で、自動保存先のフォルダーを変える方法をご紹介します。
1. 事前準備
あらかじめOneDrive(今回は OneDrive for Business)内に、添付ファイル保存用のフォルダーを用意します。添付ファイルの種類によって保存先を変えられるように、今回は次の2つのフォルダーを用意しました。
・PDF:拡張子が「.pdf」のファイルを保存するフォルダー
・その他:拡張子が「.pdf」以外のファイルを保存するフォルダー
2. 拡張子でファイルの種類を判定する
添付ファイルの種類を判定するために拡張子を利用します。拡張子とは、ファイルの種類を識別するためにファイル名の末尾に付けられる文字列(「.」以降の文字列)のことです。通常、添付ファイルのファイル名には拡張子が付いているので、そこから「.」以降の文字列を取り出せば、ファイルの種類を判定できます。
この処理を行うために、ここではLast関数とSplit関数を利用します。それぞれ次の処理を行う関数です。
・Last関数:最後の要素を取り出す
・Split関数:文字列を分割する
実際には図のようなかたちで、Last関数とSplit関数を入れ子構造にして使います。このように関数を入れ子構造にすると、先に内側の関数が実行されて、その結果を使って外側の関数が実行される順になります。
上の図の場合は、まず(1)Split関数が「.」を区切り文字(分割位置を示す文字)としてファイル名と拡張子を分割し、(2)Last関数が(1)の結果から最後の要素(つまり拡張子)を取り出します。図の場合は「pdf」という文字列が取り出されますので、これを判定条件に利用します。
3. フロー全体図
今回、Power Automateで作成するワークフローの全体像は上図のとおりです。なお今回はクラシックデザイナーの画面で説明していきますが、フローはモダンデザイナーでも同じように作成できます。
このワークフローは、添付ファイル付きの新着メールを受信したら、添付ファイルの名前(拡張子)からファイルの種類を判別し、それに応じて適切な保存先フォルダーにファイルを保存します。
3-1. トリガーの設定
今回のフローのトリガーには「Office 365 Outlook」コネクタを利用します。
検索窓に「Outlook」と入力して、「Office 365 Outlook」コネクタを選択します。トリガー一覧が表示されたら「新しいメールが届いたとき (V3)」をクリックします。
トリガーの設定は次のようにします。なお今回は、添付ファイル付きのメールを受信した場合にのみ、フローが起動するよう設定します。
(1)フォルダー:「受信トレイ」を選択
(2)添付ファイルを含める:「はい」を選択
(3)件名フィルター:メールの件名にこの文字列が含まれる場合のみフローが起動する(通常は空欄でよいのですが、今回は件名に「【テスト】」と書かれた場合のみ起動するよう設定)
(4)添付ファイル付きのみ:「はい」を選択(この設定により、添付ファイル付きのメールを受信した場合にのみフローが起動します)
3-2. アクションの設定:条件
添付ファイルの名前から拡張子を取り出してファイルの種類を判定する部分です。
検索窓に「コントロール」と入力して、「コントロール」コネクタを選択します。次にアクション一覧から「条件」をクリックします。
赤枠内の条件アクション「値の選択」をクリックして、動的なコンテンツから「添付ファイル 名前」を選択、入力します。
上述のように操作すると、自動的に「Apply to each」が設定されます。これは、1つのメールに複数のファイルが添付されていた場合に、処理がエラーにならないように付け加えられる処理ですので、気にせずそのまま進めます。
先ほど「条件」アクションの「値の選択」に動的なコンテンツ「添付ファイル 名前」を入力しましたが、これを削除したうえで、タブを「式」に切り替えます。式の入力欄には、次の内容をコピー&ペーストして「OK」をクリックします。
last(split(items('Apply_to_each')?['name'],'.'))
「2. 拡張子でファイルの種類を判定する」で説明したとおり、この式で添付ファイル名から拡張子のみを取り出しています。
取り出した拡張子が「pdf」かどうかを判定します。
(1):「次の値に等しい」
(2):「pdf」と入力
この条件設定により、添付ファイルの拡張子が「pdf」ならば「はいの場合」の処理が、そうでなければ「いいえの場合」の処理が実行されます。
4-1. 「条件」アクション:「はいの場合」
添付ファイルがPDFファイルだった場合に、「1. 事前準備」で作成した「PDFフォルダー」に保存するフローを作成します。
「条件」アクションの「はいの場合」枠内にある「アクションの追加」をクリックします。検索窓に「OneDrive」と入力し、「OneDrive for Business」を選択して、アクション一覧から「ファイルの作成」をクリックします。
(1)フォルダーのパス:「1. 事前準備」で作成した「PDFフォルダー」を選択
(2)ファイル名:動的なコンテンツ「添付ファイル 名前」を選択
(3)ファイルコンテンツ:動的なコンテンツ「添付ファイル コンテンツ」を選択
4-2. 「条件」アクション:「いいえ」の場合
今度は添付ファイルがPDFでない場合に、「1. 事前準備」で作成した「その他フォルダー」に保存するフローを作成します。
「条件」アクションの「いいえの場合」の枠内にある「アクションの追加」をクリックします。検索窓に「OneDrive」と入力し、「OneDrive for Business」を選択して、アクション一覧から「ファイルの作成」をクリックします(名前が自動的に「ファイルの作成 1」に変わります。これはすでに、同じフロー内に「ファイルの作成」アクションがあるためです)。
設定内容は、上の「4-1. 『条件』アクション:『はいの場合』」とほぼ同じです(保存先のフォルダーが「その他フォルダー」に変わります)。
(1)フォルダーのパス:「1. 事前準備」で作成した「その他フォルダー」を選択
(2)ファイル名:動的なコンテンツ「添付ファイル 名前」を選択
(3)ファイルコンテンツ:動的なコンテンツ「添付ファイル コンテンツ」を選択
以上でワークフローは完成です! 最後に忘れず「保存」をクリックして、ワークフローを保存しましょう。
実行結果
早速ワークフローを実行してみましょう。
件名に「【テスト】」を含む、添付ファイル付きのメールを送信します。今回のワークフローは複数のファイルが添付されていても処理できますので、1通のメールにPDFファイルとExcelファイルを添付してみました。
OneDriveの「PDF」フォルダーを開いて確認すると、添付ファイルのうち「ダミー請求書PDF.pdf」が保存されています。
「その他」フォルダーを確認すると、添付ファイルのうち「ダミー請求書Excel.xlsx」が保存されています。
このように、ファイルの種類を判別して保存先が変わっていることが確認できました。
最後に
今回は「PDFファイル」と「その他」の2種類の判別だったため「条件」アクションを使いましたが、「コントロール」コネクタの「Switch」アクションを使えば、3種類以上の判別をさせることもできます。対象とするファイルの種類(拡張子)を変える、増やすなど、本記事を参考にしていろいろと試してみてください。
なお、今回のフローのように、メール受信をトリガーにするフローは特に誤動作につながりやすいので注意してください。フローを利用しない場合は、こまめに実行を「オフにする」ようにしましょう。上図はオフになっている状態ですが、オフのときには黄色い帯の文言が表示されます。右上の「オンにする」をクリックすると、フローは再び起動待ちの状態になります。
参考
●First、FirstN、Index、Last、LastN 関数(Microsoft Learn)
●Split 関数(Microsoft Learn)
この連載の記事
-
第44回
Team Leaders
契約書を確実に期限管理! SharePoint+Power Automateで期日通知を自動化 -
第43回
Team Leaders
社内からの質問に自動回答! AI Builder+ノーコードでQ&Aボットを作ろう -
第42回
Team Leaders
Power Automateで複数人の承認(多段階承認)ワークフローを簡単作成しよう -
第41回
Team Leaders
重要なTeamsメッセージの見失い/見落としを防ぐPower Autometeのフローを作ろう -
第40回
Team Leaders
クラウドフローからデスクトップフローを「Picture-in-Picture」で起動する -
第39回
Team Leaders
面倒なカレンダー登録作業を生成AIで自動化するワークフローを作ろう -
第38回
Team Leaders
生成AIに日本語プロンプトで指示を出し、メールから情報を抽出してもらおう -
第37回
Team Leaders
フォルダー内のすべてのファイルを添付してメールを自動送信するフローを作ろう -
第36回
Team Leaders
ローカルPCのテキストファイルをPower Automateに読み込ませて活用しよう -
第34回
Team Leaders
Power AutomateでTeamsのチーム全員にメンションを送る方法 - この連載の一覧へ