Officeスクリプトって?
主にExcel内で使用できるスクリプトです。
セルに色をぬったり値を変更したり操作を保存できたり…と、やっていることはVBAマクロみたいなイメージですが、Power Automateから呼び出すことができます!
※Power Automate for DesktopはVBA呼び出しができます
ExcelでOfficeスクリプトを作成する方法
- スクリプトを埋め込みたいExcelをブラウザで開きます
- 「自動化」タブを選択します
- タブ内の「新しいスクリプト」をクリックします
今回やってみたこと
グループ | メールアドレス |
---|---|
グループ1 | aaa@abc.co.jp |
グループ1 | bbb@abc.co.jp |
グループ2 | ccc@abc.co.jp |
グループ2 | ddd@abc.co.jp |
上記のようなテーブルがあるExcelで、指定したグループの任意の1つのメールアドレスを取得します。
Power Automateで全て実装しようかとも思ったのですが、
Officeスクリプトの方がわかりやすいコードを書けるのでは?と思い着手しました。
コード
function main(workbook: ExcelScript.Workbook, group:string) {
// テーブル取得
let myTable = workbook.getTable("テーブル1");
// テーブルとれたかな?
if (myTable) {
const GROUP_INDEX = 1;
const EMAIL_INDEX = 2;
let bodyRange = myTable.getRangeBetweenHeaderAndTotal();
let tableRowCount = bodyRange.getRowCount();
let bodyRangeValues = bodyRange.getValues();
let email: Array<string> = new Array();
// グループが引数groupと一致するメールアドレスを配列に詰める
for (let i = 0; i < tableRowCount; i++) {
let row = bodyRangeValues[i];
if (row[GROUP_INDEX] == group) {
email.push(row[EMAIL_INDEX].toString());
}
}
// 配列からランダムにピックアップする
const randomInt = Math.floor(Math.random() * email.length);
return email[randomInt];
} else {
console.log(`MyTable is not in the workbook.`);
}
}
Power Automateからの呼び出し
Excel Online (Business) の 「スクリプトの実行」を選択し、
対象のスクリプトを選択すれば呼び出し可能です。
戻り値を使用したい場合は、「result」という形で変数を参照することができます。
参考にしたサイト
-
Excel の Office スクリプト
サンプルがたくさん載っているので、とても参考になります!
今回はTeamsカードとしてのタスクリマインダーを特に参考にしました