Office Scripts

[Office Scripts]Power Automateからスクリプトを動的に書き換えて実行する

※記事中でも書いていますが、本記事はPower AutomateのフローからOffice Scriptsのスクリプトにパラメーターを渡す方法が分からなかったときに書いたものです。スクリプトのAPIモデルも古いままになっていますが、一つの参考情報として、当時のまま記事を残しておくことにします。


先日書いた下記記事で、Power AutomateからOffice Scriptsのスクリプトが実行できることを確認しました。

このときに思ったのが、“パラメーターを指定してスクリプトを実行したい”ということ。

単に作成済みのスクリプトを実行するだけでなく、Power Automate側から何らかのパラメーターを与えられれば、活用できる場が広がりそうです。

コードのプレビューから「スクリプトの実行」コードを見てみると、下記のように「ScriptParameters」オプションが用意されていることが分かります。

恐らくこのオプションを使ってスクリプト実行時のパラメーターを指定できるのではないかと思うのですが、現時点では、画面上からそのオプションを指定する方法が分かりません。

{
    "inputs": {
        "host": {
            "connectionName": "shared_excelonlinebusiness",
            "operationId": "RunScriptProd",
            "apiId": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness"
        },
        "parameters": {
            "source": "me",
            "drive": "*****",
            "file": "*****",
            "scriptId": "ms-officescript%3A%2F%2Fonedrive_business_itemlink%2F*****",
            "ScriptParameters": {}
        },
        "authentication": {
            "type": "Raw",
            "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"
        }
    },
    "metadata": {
        "*****": "/Office Scripts with Power Automate.xlsx",
        "tableId": null
    }
}

仕方がないので、Office Scriptsのスクリプトそのものを書き換える方法を模索することにしました。


2020/5/27 追記:
パラメーターの受け渡し方法が分かったので別途記事を書きました。

元のスクリプトと実行するスクリプトの準備

上記「スクリプトの実行」コードを見る限り、「file」や「scriptId」で実行するスクリプトを指定していることから、動的に作成したスクリプトを実行するものではなく、あくまでも“既存のスクリプト”を実行するアクションであると推測できます。

そのため、下記のようにPower Automateで実行するスクリプトを事前に作成しておいて、その内容を動的に書き換える方法を試すことにしました。

  1. 元となるスクリプトと実行するスクリプトを用意
  2. 元となるスクリプトのコードの必要な部分を書き換え、実行するスクリプトとして上書き保存
  3. 手順2.のスクリプトを実行
元ファイル.osts

元となるスクリプトは下記になります。
Sheet1のセルA1に文字列を書き込むコードで、書き込む値を「{XXX}」とし、この部分を置換します。

async function main(context: Excel.RequestContext) {
  let sheet = context.workbook.worksheets.getItemOrNullObject("Sheet1");
  await context.sync();
  if (!sheet.isNullObject) {
    sheet.getRange("A1").values = [["{XXX}"]];
  }
}
Power Automateからスクリプトを書き換えて実行.osts

実行するスクリプトは下記になります。
こちらは後ですべて書き換わることになるので、ある意味どうでも良い内容です。

async function main(context: Excel.RequestContext) {
  // Your code here
}

Office Scriptsスクリプトを動的に書き換えて実行するフロー

準備ができたので、いよいよフローを作成します。

  1. ファイル コンテンツの取得」でOneDrive上のスクリプトファイル(元ファイル.osts)を取得します。
  2. ファイルの作成」で実行するスクリプトをOneDrive上に作成します。
  3. スクリプトの実行で手順2.のスクリプトを実行します。

フロー内容は上記の通りで、手順2.でスクリプトファイルを作成する際、replace関数で文字列の置換を行います。

replace(string(outputs('ファイル_コンテンツの取得')?['body']), '{XXX}', 'こんにちは、世界!')

実行結果

実行結果は下図の通りで、意図した通りに動いてくれました。

以上のように、Office Scriptsのスクリプトファイル(この記事で書いた通り、ostsはJSON形式のテキストファイル)を動的に書き換えるフローを実行できましたが、Power Automateに詳しい方であれば、もっとスマートに処理できるかもしれません。

また、Microsoftさんのことなので、今後はPower Automateのコネクタやテンプレートもより充実させてくれるはずです!
(たぶん、きっと・・・)

これからの成長が楽しみなOffice ScriptsとPower Automateの連携、興味がある方は是非お試しください!!

関連記事

[Office Scripts]セルの読み書き方法前のページ

[Office Scripts]画像を追加する方法次のページ

関連記事

  1. Power Automate

    [Power Automate]デスクトップ UI フロー実行時にハマったポイント

    下記、“Power AutomateのUIフローを試してみた”記事でも…

  2. Power Automate for desktop

    「はじめてのPower Automate Desktop」レビュー

    以前書いた記事でも紹介していますが、株式会社ASAHI Account…

  3. Office Scripts

    Office Scripts機能によってWeb版Officeの操作を自動化する

    前回、Ignite 2019で発表されたPower Automate(…

  4. Office Scripts

    Office Scriptsの要件と制限

    いまさらですが、Office Scriptsのシステム要件や制限事項に…

  5. Office Scripts

    Visual Studio Code for Office Scriptsの紹介

    インストール要らずで利用できるWeb用Visual Studio Co…

  6. Office アドイン

    Global Microsoft 365 Developer Bootcamp 2020 TOKYO…

    2020年11月9日(月)と10日(火)の二日間、Microsoft …

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP