【Power Automate×Officeスクリプト】毎月特定の日以降に書類未提出者の一覧をメールし続けるフロー
こんにちは。aliceです。
寒いですね。冷蔵庫の中に住んでいるのではないかというくらい寒いですね。
今日はPower AutomateとOfficeスクリプトを使って、「毎月特定の日以降に書類未提出者の一覧をメールし続けるフロー」のはなしです。
具体的には「毎月25日以降」の「平日」に「書類の未提出者の一覧」を取得して、「この人はまだ書類を提出していないよ!」というメールを送信するフローです。
全員が提出するまで毎日(月が変わるまで)メールを送信し続けます。
まずこのようなExcelの表があります。
この表から未提出者(提出日が書かれていない人(芋))の一覧を取得します。
この場合は「べにはるかさん」と「シルクスイートさん」ですね。
そして、毎月25日以降に未提出者がいるときはメールを送信します。
下のカレンダーでいうと〇が付いている日です。
こんな感じのメールが届きます💦
このメールを未提出者がいなくなるまで、そして月がかわるまで毎日送信します。
はい、怖いですね😱
外も寒いので凍えレベルが2倍になりますね。
寒い冬にはぴったりのフローです。
ということで実際に作ったのがこちらです。
今回はなるべくOfficeスクリプトで書けるところはOfficeスクリプトで書きました。
コードを書けるところはなるべく書きたい派なのです。
それでは、中身を見ていきましょう。
あたたかい飲み物とともにどうぞ。
Officeスクリプト編
ではでは、まずはOfficeスクリプトから見ていきましょう。
未提出者を取得する
まずは、未提出者を取得します。
このようなExcelの表から未提出者(提出日が記入されていない人(芋))を取得します。
ということで書いてみました。
function main(workbook: ExcelScript.Workbook): string {
const sheet = workbook.getWorksheet('提出確認');
const values = sheet.getUsedRange().getValues();
values.shift();
const array: string[] = [];
for (let value of values) {
if (value[3] === '') array.push(value[1] + ' ' + value[2]);
}
const message = array.join('<br>');
return message;
}
arrayという配列に「部署名+スペース+名前」を要素として入れます。
["いも課 べにはるか", "いも課 シルクスイート"]
このような配列ができました。
そして、メールに一覧として表示したいので「いも課 べにはるか」という形式で取得します。
joinメソッドを使って、配列arrayの要素を「<br>」で結合した文字列にします。
いも課 べにはるか<br>いも課 シルクスイート
これで、メールで送信するときに改行してくれます。
Power Automateのアクションを少しでも減らす作戦です。
メールアドレスを取得
次にメールアドレスを取得します。
先ほどの未提出者の取得とほとんど同じです。
こちらはこのままメールの宛先として使用したいので、作成した配列をjoinメソッドを使って「;」で結合しました。
function main(workbook: ExcelScript.Workbook):string {
const worksheet = workbook.getWorksheet('送信先一覧');
const values = worksheet.getUsedRange().getValues();
values.shift();
const records = values.map(record => record[1]);
const address: string = records.join(';');
return address;
}
Excelからデータを取得できたので、次はPower Automateでフローを作っていきます。
Power Automate編
ここからは、Power Automate編です。
繰り返し
まずは平日は繰り返すというトリガーを作成します。
平日なので設定曜日を月曜日から金曜日にします。
今回は朝6時に実行してみました。ここらへんはお好みです。
変数を初期化する
実行日の日付を取得する変数を作成します。
dayという名前の変数に実行日の日付を取得して入れます。
例えば1月23日だったら「23」という整数です。
数式はこちら
int(convertTimeZone(utcNow(),'UTC','Tokyo Standard Time','dd'))
実行時の日付のタイムゾーンを東京にして、日付だけ取得します。
そして、convertTimeZone関数の戻り値は文字列型なので、数値型に変換します。
スクリプトの実行
先ほど作成したスクリプトを実行していきましょう。
場所などは作成した場所から選択してください。
条件
条件を設定します。
「毎月25日以降」の「平日」に「書類の未提出者の一覧」を送信したいので次のとおり設定します。
日付が25日以降(変数dayの値が25以上)
未提出者がいる場合(未提出者取得のスクリプトの戻り値がないときを除いく)
「平日」にというのはトリガーで設定しましたので、ここでは不要です。
全体像はこちら。
メールの送信
条件に一致するときはメールを送信します。
フローはこれで完了です。
あとはテストして実行してみましょう。
フローの実行
それでは、フローを実行してみます。
無事にメールが送信されました。
ガクブルですね。
参考
convertTimeZone関数はようさんのブログがわかりやすかったです。
いつも気ままに勉強会でお世話になっているようさん。
ありがとうございます!!
Officeスクリプト記事まとめ📝
『Officeスクリプト入門講座』を書きました📝
この記事が気に入ったらサポートをしてみませんか?