チュートリアル: スプレッドシート データに基づいて毎週のメール リマインダーを送信する
このチュートリアルでは、自動化された Power Automate ワークフローの一部として Office Script for Excel から情報を返す方法について説明します。 スケジュールを確認し、フローに従ってリマインダー メールを送信するスクリプトを作成します。 このフローは定期的に実行され、ユーザーに代わってこれらのリマインダーを提供します。
ヒント
Office スクリプトを初めて使用する場合は、「 チュートリアル: Excel テーブルを作成して書式設定する」から始めてお勧めします。
Power Automate を初めて使用する場合は、「 チュートリアル: Power Automate フローからスプレッドシートを更新する」 と「 チュートリアル: ブック内のメールからコンテンツを自動的に保存する」から始めてお勧めします。
Office スクリプトは TypeScript を使用します。このチュートリアルは、JavaScript や TypeScript について初級から中級レベルの知識を持つユーザーを対象としています。 JavaScript を使い慣れていない場合は、「Mozilla の JavaScript チュートリアル」から始めることをお勧めします。
前提条件
このチュートリアルでは、Office スクリプトと Power Automate にアクセスする必要があります。 [自動化] タブが表示されない場合は、 プラットフォームのサポート を確認してください。 Power Automate サインアップに関する FAQ には、Power Automate の概要に関する情報があります。
ブックを準備する
ブック on-call-rotation.xlsx を 自分の OneDrive にダウンロードします。
Excel でon-call-rotation.xlsx を開きます。
テーブルに行を追加して、自分の名前、メール アドレス、および現在の日付と重なるように開始日と終了日を入力します。
重要
これから作成するスクリプトは、テーブル内の最初に一致するエントリを使用するため、自分の名前が現在の週のどの行よりも上にあることを確認してください。
Office スクリプトを作成する
[ 自動化 ] タブに移動し、[ 新しいスクリプト] を選択します。
スクリプトに Get On-Call Person という名前を付けます。
これで空のスクリプトができました。 スプレッドシートからメール アドレスを取得するスクリプトが必要です。 文字列が返されるように、
main
を次のように変更します。function main(workbook: ExcelScript.Workbook) : string { }
次に、テーブルからすべてのデータを取得する必要があります。 これにより、スクリプトは各行を確認できます。
main
関数に次のコードを追加します。// Get the H1 worksheet. let worksheet = workbook.getWorksheet("H1"); // Get the first (and only) table in the worksheet. let table = worksheet.getTables()[0]; // Get the data from the table. let tableValues = table.getRangeBetweenHeaderAndTotal().getValues();
テーブル内の日付は、Excel の日付システムを使用して保存されます。 これらの日付を比較するには、それらの日付を JavaScript 日付に変換する必要があります。 関数の外部に次のヘルパー関数を
main
追加します。// Convert the Excel date to a JavaScript Date object. function convertDate(excelDateValue: number) { let javaScriptDate = new Date(Math.round((excelDateValue - 25569) * 86400 * 1000)); return javaScriptDate; }
次に、現在通話中のユーザーを把握する必要があります。 それらの行では、開始日と終了日の間に現在の日付が含まれています。 スクリプトでは、一度に呼び出し中のユーザーは 1 人だけであると想定されます。 スクリプトは配列を返して複数の値を処理できますが、このチュートリアルでは最初に一致するメール アドレスを返すことができます。 次の関数を
main
関数の最後に追加します。// Look for the first row where today's date is between the row's start and end dates. let currentDate = new Date(); for (let row = 0; row < tableValues.length; row++) { let startDate = convertDate(tableValues[row][2] as number); let endDate = convertDate(tableValues[row][3] as number); if (startDate <= currentDate && endDate >= currentDate) { // Return the first matching email address. return tableValues[row][1].toString(); } }
最終的なスクリプトは、次のようになります。
function main(workbook: ExcelScript.Workbook) : string { // Get the H1 worksheet. let worksheet = workbook.getWorksheet("H1"); // Get the first (and only) table in the worksheet. let table = worksheet.getTables()[0]; // Get the data from the table. let tableValues = table.getRangeBetweenHeaderAndTotal().getValues(); // Look for the first row where today's date is between the row's start and end dates. let currentDate = new Date(); for (let row = 0; row < tableValues.length; row++) { let startDate = convertDate(tableValues[row][2] as number); let endDate = convertDate(tableValues[row][3] as number); if (startDate <= currentDate && endDate >= currentDate) { // Return the first matching email address. return tableValues[row][1].toString(); } } } // Convert the Excel date to a JavaScript Date object. function convertDate(excelDateValue: number) { let javaScriptDate = new Date(Math.round((excelDateValue - 25569) * 86400 * 1000)); return javaScriptDate; }
Power Automate を使用して自動化されたワークフローを作成する
「Power Automate のサイト」にサインインします。
画面の左側に表示されるメニューで、[作成] を選択します。 これにより、新しいワークフローを作成する方法の一覧を表示できます。
[空白から開始] セクションで [スケジュール済みクラウド フロー] を選択します。
次に、このフローのスケジュールを設定します。 スプレッドシートには、2024 年前半の毎週月曜日から新しいオンコール割り当てが行われます。 最初に月曜日の朝に実行するようにフローを設定します。 次のオプションを使用して、毎週月曜日に実行するようにフローを構成します。
- フロー名: Notify On-Call Person
- 開始: 11/27/23 午前 1:00
- 繰り返し間隔: 1 週
- 設定曜日: 月
[作成] を選択します。
フロー ビルダーで、[アクションの追加] + ボタンを選択 します。
[ アクションの追加 ] 作業ウィンドウで、"Excel 実行スクリプト" を検索します。 Excel Online (Business) コネクタの [スクリプトの実行] アクションを選択します。 このアクションは、ブック上の OneDrive からスクリプトを実行します。 チームの SharePoint ライブラリに格納されているスクリプトを使用する場合は、[SharePoint ライブラリからスクリプトを実行 する] アクションを使用する必要があります。
Microsoft 365 アカウントにサインインするように求められる場合があります。 これを行って、チュートリアルを続行します。
次に、フロー ステップで使用するブックおよびスクリプトを選択します。 このチュートリアルでは、OneDrive に作成したブックを使用しますが、OneDrive サイトまたは SharePoint サイトでは任意のブックを使用できます。 [スクリプトの実行] アクションに次のパラメーターを指定します。
- 場所: OneDrive for Business
- ドキュメント ライブラリ: OneDrive
- ファイル: on-call-rotation.xlsx (ファイル ブラウザーを使用して選択されています)
- スクリプト: Get On-Call Person
フロー ビルダーで、[アクションの追加] + ボタンを選択 します。
リマインダーメールを送信してフローを終了します。 [ アクションの追加 ] 作業ウィンドウで、"メールの送信" を検索します。 Office 365 Outlook コネクタの [メールの送信 (V2)] アクションを選択します。
注:
このチュートリアルでは、Outlook を使用します。 代わりに、お好きなメール サービスを自由に使用することもできますが、一部のオプションは異なる場合があります。
[ To ] パラメーターで、テキスト ボックスを選択し、[ カスタム値の入力] を選択します。 スクリプトから返される電子メール アドレスを追加するには、動的コンテンツ コントロールを使用します。 これは、result というラベル付きの Excel アイコンで示されます。 件名、本文は自由に入力できます。
[保存] を選択します。
Power Automate でスクリプトをテストする
作成したフローは毎週月曜日に実行されます。 画面の右上隅にある [テスト] ボタンを選択すると、スクリプトをテストできます。 [手動] を選択し、[テストの実行] を選択して直ちにフローを実行し、動作をテストします。 続行するには、Excel と Outlook にアクセス許可を付与する必要がある場合があります。
ヒント
フローでメールを送信できない場合は、スプレッドシートで、有効なメールが現在の日付範囲用としてテーブルの先頭にリストされていることを再確認してください。
次の手順
Office スクリプトを Power Automate に接続する方法に関する詳細については、 「Power Automate で Office スクリプトを実行する」を参照してください。
「自動タスク リマインダーのサンプル シナリオ」では、Office スクリプトと Power Automate を Teams アダプティブ カードと組み合わせる方法についても説明します。
Office Scripts