本日は Office Scriptsを組織(チーム)で利用する方法についてのお話です。
Background
- Office ScriptsはExcelで利用できる一種のマクロ機能。
- Excelブック内のシートやテーブル、そこに格納されたデータをTypeScriptで参照したり更新したりできる機能。
- 実態はExcel Onlineの仕組みの中で管理されるTypeScript関数なので、シートやテーブルやそこに格納されたデータを処理しない関数(例:引数で与えられた文字列に正規表現パターンマッチをして結果を返すだけの関数)も定義可能。
- 引数として受け取ることができる型、戻り値として返すことができる型には制限あり。
- PowerAutomateでワークフローを作るとき、ワークフローのネイティブなしくみでは実現が難しい機能をOffice Scriptsを利用して実現することができる。
function main(workbook: ExcelScript.Workbook /* ここに任意の引数 */) {
/* ここにビジネスロジック */
}
Problem
- Office Scriptsの関数はデフォルトではM365ユーザーの個人個人に属し、各ユーザーのOnDrive内で管理。SharePointで管理されている組織(チーム)で共有のExcelファイルで、他のユーザーが利用することはできない。
- Office Scriptsの関数を「Excelブックに追加」することで、当該Excelファイルにアクセスできるユーザーに限り共有することができる。
- この共有を行った状態であれば、PowerAutomateの「スクリプトを実行」アクションなどから、他のユーザーが定義した関数を実行することも可能。
- ・・・なのだが、どういうわけかこの関数の「共有」がいつの間にかうまく行かない状態となり、 「スクリプトを実行」の設定画面で関数を選択できなかったり、すでに設定済みの「スクリプトを実行」アクションを実行するとエラーとなったり するケースがある。
- そうでなくても、M365ユーザー個人が持つ関数をExcelブックに関連付けるような仕組みで、その関数もExcel Onineの「自動化」タブを表示してはじめて一覧できるというもののため、 可視性/アクセス性が低く、組織(チーム)で関数を共有して利用する上で課題 となる。
Solution
どうやら昨年(2022年)から、Office Scriptsの関数をファイルとしてSharePoint上で管理できるようになったらしい。
これを利用すると、個人所有ではなく組織(チーム)所有の関数が定義できる。
以下のUIで「スクリプトに名前をつけて保存」をクリックすると、従来のOnDriveに加えてSharePointサイトも保存先に選べるようになっていることが分かる:
ここからSharePointサイト上に保存すると、当該SharePointサイトにアクセスできる組織(チーム)のメンバーはこの関数を利用できるようになる。
そしてPowerAutomateからこのスクリプトを実行する場合は、「Run scrip from SharePoint library」アクションを利用する:
まだプレビュー版。ドキュメントも見つけられなかったが、このアクションを使用し以下の項目を設定すると組織(チーム)管理の関数を実行することができる:
項目名 | 説明 |
---|---|
ブックの場所 | 関数による操作対象になるExcelファイルの保管されているSharePointサイト |
ブックライブラリ | 上記サイト内で、関数による操作対象になるExcelファイルの保管されているのドキュメントライブラリ |
ブック | 上記ライブラリ内で、関数による操作対象になるExcelファイルの保管されているパス |
スクリプトの場所 | 関数の保管されているSharePointサイト |
スクリプトライブラリ | 上記サイト内で、関数の保管されているドキュメントライブラリ |
スクリプト | 上記ライブラリ内で、関数の保管されているパス |