こんにちは、おかちゃんせんせいです!
連日最近仕事で対応した案件でつまずいたポイントについて、記事に整理してきました。
そこで今回は、
GASでonOpen関数をトリガー実行するとエラーになってしまう件
について記事にまとめることにしました。
目次
エラーの内容
具体的には、onOpen関数内でメニューを表示し、セルを移動する処理を書いてあるだけですが、なぜか下記エラーが発生してしまっていました。
Exception: SpreadsheetApp.openById を呼び出す権限がありません。
ただ、メニューを呼び出す処理ではSpreadsheetApp.openByIdメソッドは使っていなかったので、なぜエラーが発生しているのかわからず。
しかも、トリガーで自動実行されたときに、なぜか1つ失敗して、1つ完了しているという。。。
一つしかトリガーを設定していないのに、2つ起動したのがよく理由がわかりませんが、、、
onOpen関数は同じですが種類が失敗しているのがシンプルなトリガー。
完了しているのがトリガー、というのがわかります。
解決方法は関数名を変えるだけ
エラー自体はonOpen関数起動時に、グローバルスコープでSpreadsheetApp.openByIdを呼び出しているのが箇所で起きているのを確認。
ただ、対象のスプレッドシートを開く権限自体はあるのに、権限がないエラーが出るのが意味不明でした。
そこで、Google先生で調べてみると、同じ現象でつまずいた方が解決している記事を発見!
記事を拝見したところ、下記内容がわかりました。
- シンプルトリガーで実行されるメソッドでは他のスプレッドシートを参照することはできないこと
- スクリプトからInstallableTriggersを登録した場合には、その登録したメソッド内で他のスプレッドシートを参照することができること
シンプルトリガーとは、onEdit(e)やonOpen(e)などの自動実行される関数のこと。
それに対して、InstallableTriggersとは上記以外の関数を指すようです。
そこで、拝見した記事にかいてあるように、onOpen関数の名前をonEditCellに変更して、トリガーも変更したところ、無事にエラーなく完了できることを確認いたしました。
例外的な仕様について事前に把握するのは難しいので、今回のように実際にエラーに遭遇してみないとわかりませんね。
今回の記事がお役に立てれば幸いです。
最後まで読んでいただき、ありがとうございました!