チュートリアル: ブック内のメールからコンテンツを自動的に保存する
このチュートリアルでは、自動化された Power Automate ワークフローで Office Script for Excel を使用する方法について説明します。 スクリプトは、メールを受信したときに自動的に実行されます。また、Excel ブック内のメールから情報を記録します。 別のアプリケーションから Office スクリプトにデータを渡すことができるようになると、自動プロセスの柔軟性と自由性が大きく向上します。
ヒント
Office スクリプトを初めて使用する場合は、「 チュートリアル: Excel テーブルを作成して書式設定する」から始めてお勧めします。 Power Automate を初めて使用する場合は、「 チュートリアル: Power Automate フローからスプレッドシートを更新する」から開始することをお勧めします。 Office スクリプトは TypeScript を使用します。このチュートリアルは、JavaScript や TypeScript について初級から中級レベルの知識を持つユーザーを対象としています。 JavaScript を使い慣れていない場合は、「Mozilla の JavaScript チュートリアル」から始めることをお勧めします。
前提条件
このチュートリアルでは、Office スクリプトと Power Automate にアクセスする必要があります。 [自動化] タブが表示されない場合は、 プラットフォームのサポート を確認してください。 Power Automate サインアップに関する FAQ には、Power Automate の概要に関する情報があります。
ブックを準備する
Power Automate では、ブック コンポーネントにアクセスするために Workbook.getActiveWorksheet
などの相対参照を使わないようにする必要があります。 そのため、Power Automate で参照するには、一貫性のある名前のブックとワークシートが必要です。
MyWorkbook という名前の新しいブックを作成します。
[ 自動化 ] タブに移動し、[ 新しいスクリプト] を選択します。
既存のコードを次のスクリプトで置き換え、[実行] を選択します。 これにより、統一されたワークシート、テーブル、ピボットテーブルの名前でブックが設定されます。
function main(workbook: ExcelScript.Workbook) { // Add a new worksheet to store the email table. let emailsSheet = workbook.addWorksheet("Emails"); // Add data and create a table emailsSheet.getRange("A1:D1").setValues([ ["Date", "Day of the week", "Email address", "Subject"] ]); let newTable = workbook.addTable(emailsSheet.getRange("A1:D2"), true); newTable.setName("EmailTable"); // Add a new PivotTable to a new worksheet let pivotWorksheet = workbook.addWorksheet("Subjects"); let newPivotTable = workbook.addPivotTable("Pivot", "EmailTable", pivotWorksheet.getRange("A3:C20")); // Setup the pivot hierarchies newPivotTable.addRowHierarchy(newPivotTable.getHierarchy("Day of the week")); newPivotTable.addRowHierarchy(newPivotTable.getHierarchy("Email address")); newPivotTable.addDataHierarchy(newPivotTable.getHierarchy("Subject")); }
Office スクリプトを作成する
電子メールから情報をログに記録するスクリプトを作成します。 最も多くのメールを受信した曜日と、そのメールを送信している一意の送信者の数を追跡する必要があります。 ブックには、Date、Day of the week、Email address、Subject 列を含むテーブルがあります。 ワークシートには、曜日とEmailアドレス (行階層) にピボットするピボットテーブルもあります。 一意の [件名] の数は、表示されている集計情報(データ階層)です。 スクリプトは、電子メール テーブルを更新した後、そのピボットテーブルを更新します。
[コード エディター] 作業ウィンドウ内で、[新しいスクリプト] を選択します。
チュートリアルの後半で作成するフローは、受信した各メールに関するスクリプト情報を送信します。 スクリプトは、
main
関数のパラメーターを使用して、その入力を受け付ける必要があります。 既定のスクリプトを次のスクリプトに置き換えます。function main( workbook: ExcelScript.Workbook, from: string, dateReceived: string, subject: string) { }
スクリプトには、ブックのテーブルとピボットテーブルにアクセスする必要があります。 を開
{
いた後、スクリプトの本文に次のコードを追加します。// Get the email table. let emailWorksheet = workbook.getWorksheet("Emails"); let table = emailWorksheet.getTable("EmailTable"); // Get the PivotTable. let pivotTableWorksheet = workbook.getWorksheet("Subjects"); let pivotTable = pivotTableWorksheet.getPivotTable("Pivot");
dateReceived
パラメーターのタイプはstring
です。 曜日を簡単にDate
取得できるように、オブジェクトに変換します。 その後、その日の数値をより読みやすいバージョンにマップする必要があります。 を閉じる前に、スクリプトの末尾に次のコードを追加します}
。// Parse the received date string to determine the day of the week. let emailDate = new Date(dateReceived); let dayName = emailDate.toLocaleDateString("en-US", { weekday: 'long' });
subject
文字列には、"RE:" という返信タグを含めることができます。 同じスレッド内の電子メールがテーブルの同じ件名になるように、文字列から削除します。 を閉じる前に、スクリプトの末尾に次のコードを追加します}
。// Remove the reply tag from the email subject to group emails on the same thread. let subjectText = subject.replace("Re: ", ""); subjectText = subjectText.replace("RE: ", "");
メール データの書式設定が完了しましたので、メール テーブルに行を追加します。 を閉じる前に、スクリプトの末尾に次のコードを追加します
}
。// Add the parsed text to the table. table.addRow(-1, [dateReceived, dayName, from, subjectText]);
最後に、ピボットテーブルが更新されていることを確認します。
}
を閉じる前に、スクリプトの最後に次のコードを追加します。// Refresh the PivotTable to include the new row. pivotTable.refresh();
スクリプトの名前を [メールを記録] に変更し、[スクリプトの保存] を選択します。
これで、スクリプトは Power Automate ワークフローで使用できるようになりました。 次のスクリプトのようになります。
function main(
workbook: ExcelScript.Workbook,
from: string,
dateReceived: string,
subject: string) {
// Get the email table.
let emailWorksheet = workbook.getWorksheet("Emails");
let table = emailWorksheet.getTable("EmailTable");
// Get the PivotTable.
let pivotTableWorksheet = workbook.getWorksheet("Subjects");
let pivotTable = pivotTableWorksheet.getPivotTable("Pivot");
// Parse the received date string to determine the day of the week.
let emailDate = new Date(dateReceived);
let dayName = emailDate.toLocaleDateString("en-US", { weekday: 'long' });
// Remove the reply tag from the email subject to group emails on the same thread.
let subjectText = subject.replace("Re: ", "");
subjectText = subjectText.replace("RE: ", "");
// Add the parsed text to the table.
table.addRow(-1, [dateReceived, dayName, from, subjectText]);
// Refresh the PivotTable to include the new row.
pivotTable.refresh();
}
Power Automate を使用して自動化されたワークフローを作成する
「Power Automate のサイト」にサインインします。
画面の左側に表示されるメニューで、[作成] を選択します。 これにより、新しいワークフローを作成する方法の一覧を表示できます。
[白紙から初める] セクションで、[自動フロー] を選択します。 これにより、メールの受信などのイベントによってトリガーされるワークフローが作成されます。
ダイアログ ウインドウが表示されたら、[フロー名] のテキスト ボックスに、フローの名前を入力します。 [ フローのトリガーの選択] で、オプションの一覧から [新しいメールが届いたとき ] を選択します。 検索ボックスを使用して、オプションを検索することが必要になる場合があります。 最後に、[作成] を選択します。
注:
このチュートリアルでは、Outlook を使用します。 代わりに、お好きなメール サービスを自由に使用することもできますが、一部のオプションは異なる場合があります。
フロー ビルダーで、[アクションの追加] + ボタンを選択 します。
[ アクションの追加 ] 作業ウィンドウで、"Excel 実行スクリプト" を検索します。 Excel Online (Business) コネクタの [スクリプトの実行] アクションを選択します。 このアクションは、ブック上の OneDrive からスクリプトを実行します。 チームの SharePoint ライブラリに格納されているスクリプトを使用する場合は、[SharePoint ライブラリからスクリプトを実行 する] アクションを使用する必要があります。
Microsoft 365 アカウントにサインインするように求められる場合があります。 これを行って、チュートリアルを続行します。
次に、フロー ステップで使用するブックおよびスクリプトを選択します。 このチュートリアルでは、OneDrive に作成したブックを使用しますが、OneDrive サイトまたは SharePoint サイトでは任意のブックを使用できます。 [スクリプトの実行] アクションに次のパラメーターを指定します。
- 場所: OneDrive for Business
- ドキュメント ライブラリ: OneDrive
- ファイル: MyWorkbook.xlsx (ファイル ブラウザーを使用して選択されています)
- スクリプト: メールの記録
- ScriptParameters/from: From (Outlook からの動的コンテンツ)
- ScriptParameters/dateReceived: 受信時刻 (Outlook からの動的コンテンツ)
- ScriptParameters/subject: Subject (Outlook からの動的コンテンツ)
スクリプトのパラメーターは、スクリプトが選択された後にのみ表示されるので、注意してください。
[保存] を選択します。
フローが有効になります。 Outlook でメールを受信するたびに、スクリプトが自動的に実行されます。
Power Automate でスクリプトを管理する
Power Automate のメイン ページで、[自分のフロー] を選択します。
フローを選択します。 ここでは、実行履歴を表示することができます。 ページを更新するか、[すべての実行] を更新するボタンを選択して、履歴を更新することができます。 フローは、メールを受信するとすぐにトリガーされます。 メッセージを送信してフローをテストします。
フローがトリガーされて、スクリプトが正常に実行されると、ブックのテーブルとピボットテーブルの更新が表示されます。
トラブルシューティング
同時に複数のメールを受信すると、Excel でマージの競合が発生する可能性があります。 このリスクは、電子メール コネクタを一度に 1 つのメールのみに対して動作するように設定することで軽減されます。 これを行うには、次の手順を実行します。
[電子メールが届く] アクションを選択し、[設定] を選択 します。
ポップアップ表示される [設定] オプションで、[コンカレンシー制御] を [オン] に設定します。 次に、[並列処理の度合い] を 1 に設定します。
次の手順
完全なチュートリアル: スプレッドシート データに基づいて週単位の電子メール リマインダーを送信します。 このチュートリアルでは、スクリプトからフローにデータを返す方法を説明します。
「自動タスク リマインダーのサンプル シナリオ」では、Office スクリプトと Power Automate を Teams アダプティブ カードと組み合わせる方法についても説明します。
Office Scripts