Power Automate はローコード/ノーコードで簡単にワークフローを作れますが、手の込んだループを作ろうとしたり複雑な処理を行おうとするとどうしても入り組んだ(?)構成になってしまいます。
Azure Functions や Azure Automation といったスクリプトに処理を渡してしまうのも一つの手ですが、これだと有償ライセンスが必要になります(プレミアムコネクタのため)。
そこで、ちょっとした処理を渡すのに便利な Office スクリプトをご紹介したいと思います。
これは Excel ファイルに含まれるスクリプトで、 VBScript とは異なるもので、 JavaScript (TypeScript) で作成します。
Office スクリプトそのものについては詳しく紹介されているエントリーがたくさんあると思いますので、ここでは「Power Automateから呼び出すスクリプト」としての Office スクリプトについて触れようと思います。
Excel ファイルを SharePoint ライブラリまたは OneDrive に用意する
Office スクリプトは Excel on the Web 上で動作します。従って「Excel ファイル(.xlsx)」を「SharePoint ライブラリ」または OneDrive に置きます。チーム内で利用するワークフローを想定しますので、ここでは SharePoint ライブラリとします。
Excel ファイルを開き、[自動化]-[新しいスクリプト]をクリックする
作成されたファイルをクリックするとそのままファイルが Excel on the Web (ブラウザ上)で開きます。
自動化メニューをクリックし、新しいスクリプトをクリックします。
ある程度のルールに従って記述する
自動で main 関数を含む処理が表示されます。これの構造は(Power Automate から利用する場合としては)以下のようになります。
要するに
- Power Automate から受け取る値(引数)
- 行いたい処理
- ログとして出力したい値、結果として返したい値
を書けばいいわけです。
例えば、以下のように書いておきます。
function main(workbook: ExcelScript.Workbook,
inputString: string
)
{
let numberOfStrings: number = inputString.length;
console.log(`元の値:${inputString}`);
return numberOfStrings;
}
クラウドフローから呼び出す
スクリプトを保存してから、Power Automateにてクラウドフローの作成に移ります。
Excel Online (Business) のアクションから「スクリプトの実行」を選択します。
先ほどのファイルを指定するとスクリプトが選べるようになっています。選べなかった場合、スクリプトの保存を実行していない可能性がありますので、再度ご確認ください。
スクリプトがちゃんと書けていれば、以下のように引数を指定できるようになっています。
フローを保存してテスト実行してみます。うまく行くと、以下のように result と log がそれぞれ出力されます。
もちろん以下のように、以下のフローで結果を利用することができます。
ここまでわかっていれば以下のサンプルを読み解いて Power Automate で動かすための Office スクリプトが作成できるようになると思います。
https://docs.microsoft.com/ja-jp/office/dev/scripts/resources/samples/samples-overview
まとめ
Power Automate は大変便利なのですが、細かい処理をしようとしたときにフローが複雑になることがあります。そのような場合に利用するとよいと思います。ちなみに、今回のように Excel ファイルの中身(シートやテーブル)が空でも利用できます。
Power Automate はシートがテーブル化されていないと読み取ることはできませんが、Office スクリプトを経由すればシートの位置を指定して(A1とか)直接読み取ることができます。
次回以降で掘り下げていこうと思います。