自分を活かして 相手を活かして 今を活かす

【解決】GASでonOpen関数をトリガー実行するとエラーになってしまう件について

こんにちは、おかちゃんせんせいです!

連日最近仕事で対応した案件でつまずいたポイントについて、記事に整理してきました。

そこで今回は、
GASでonOpen関数をトリガー実行するとエラーになってしまう件
について記事にまとめることにしました。

◆お知らせ◆

【まとめ記事】

現在、これまで書いてきた記事をテーマ別にまとめています。

詳しくはこちらから

GASでonOpen関数をトリガー実行するとエラーになってしまう件

エラーの内容

具体的には、onOpen関数内でメニューを表示し、セルを移動する処理を書いてあるだけですが、なぜか下記エラーが発生してしまっていました。

Exception: SpreadsheetApp.openById を呼び出す権限がありません。

ただ、メニューを呼び出す処理ではSpreadsheetApp.openByIdメソッドは使っていなかったので、なぜエラーが発生しているのかわからず。

しかも、トリガーで自動実行されたときに、なぜか1つ失敗して、1つ完了しているという。。。

一つしかトリガーを設定していないのに、2つ起動したのがよく理由がわかりませんが、、、
onOpen関数は同じですが種類が失敗しているのがシンプルなトリガー
完了しているのがトリガー、というのがわかります。

解決方法は関数名を変えるだけ

エラー自体はonOpen関数起動時に、グローバルスコープでSpreadsheetApp.openByIdを呼び出しているのが箇所で起きているのを確認。

ただ、対象のスプレッドシートを開く権限自体はあるのに、権限がないエラーが出るのが意味不明でした。

そこで、Google先生で調べてみると、同じ現象でつまずいた方が解決している記事を発見!
記事を拝見したところ、下記内容がわかりました。

エラーの原因と対策
  • シンプルトリガーで実行されるメソッドでは他のスプレッドシートを参照することはできないこと
  • スクリプトからInstallableTriggersを登録した場合には、その登録したメソッド内で他のスプレッドシートを参照することができること

シンプルトリガーとは、onEdit(e)やonOpen(e)などの自動実行される関数のこと。
それに対して、InstallableTriggersとは上記以外の関数を指すようです。

そこで、拝見した記事にかいてあるように、onOpen関数の名前をonEditCellに変更して、トリガーも変更したところ、無事にエラーなく完了できることを確認いたしました。


おわりに

例外的な仕様について事前に把握するのは難しいので、今回のように実際にエラーに遭遇してみないとわかりませんね。

今回の記事がお役に立てれば幸いです。


最後まで読んでいただき、ありがとうございました!

【まとめ】Googleスプレッドシート・GAS関連の記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA