Google Apps Scriptで「~を呼び出す権限がありません」とエラーが出たときの解決法

Google Apps Scriptで「~を呼び出す権限がありません」とエラーが出たときの解決法仕事でGoogle Apps Scriptを使っております。

最近ちょっとつまずいたポイントをメモしました。

「~を呼び出す権限がありません」の意味とは

ユーザー関数で呼ぼうとしたところ!

「呼び出す権限がありません」と言われてしまいました。

おかしいな~、おかしいな~、確かに実行許可もしているはずなのにな~(稲川淳二風)

と思って、色々と調べてみたところ!

公式ドキュメントにこんな注意書きが!

Advanced

Using Apps Script services

Custom functions can call certain Apps Script services to perform more complex tasks. For example, a custom function can call the Language service to translate an English phrase into Spanish.

Unlike most other types of Apps Scripts, custom functions never ask users to authorize access to personal data. Consequently, they can only call services that do not have access to personal data, specifically the following:

Supported services Notes
Cache Works, but not particularly useful in custom functions
HTML Can generate HTML, but cannot display it (rarely useful)
JDBC
Language
Lock Works, but not particularly useful in custom functions
Maps Can calculate directions, but not display maps
Properties
Spreadsheet Read only (can use most get*() methods, but not set*()).
Cannot open other spreadsheets (SpreadsheetApp.openById() or SpreadsheetApp.openByUrl()).
URL Fetch
Utilities
XML

If your custom function throws the error message You do not have permission to call X service., the service requires user authorization and thus cannot be used in a custom function.

To use a service other than those listed above, create a custom menu that runs an Apps Script function instead of writing a custom function. A function that is triggered from a menu will ask the user for authorization if necessary and can consequently use all Apps Script services

大雑把に訳すと以下の通り、

上級

Appsスクリプトサービスの使用

カスタム関数は、特定のApps Scriptサービスを呼び出し て、より複雑なタスクを実行できます。たとえば、カスタム関数は、英語のフレーズをスペイン語に翻訳するために、言語サービスを呼び出すことができます 。

他のほとんどのタイプのAppsスクリプトとは異なり、カスタム機能は、ユーザーに個人データへのアクセスを許可するよう要求することはありません。その結果、個人データにアクセスできないサービス、特に以下のサービスのみを呼び出すことができます。

サポートされるサービス ノート
キャッシュ 動作しますが、カスタム関数では特に有用ではありません
HTML HTMLを生成することはできますが、表示することはできません(ほとんど役に立ちません)
JDBC
言語
ロック 動作しますが、カスタム関数では特に有用ではありません
地図 ルートは計算できますが地図は表示できません
プロパティ
スプレッドシート 読み取り専用(ほとんどのget*()メソッドを使用できますが、使用できませんset*())。
他のスプレッドシート( または)を開くことができません。SpreadsheetApp.openById()SpreadsheetApp.openByUrl()
URL取得
ユーティリティー
XML

カスタム関数がエラーメッセージをスローしたYou do not have permission to call X service.場合、サービスはユーザーの承認を必要とするため、カスタム関数で使用することはできません。

上記以外のサービスを使用するには、カスタム関数を記述する代わりにApps Script関数を実行するカスタムメニューを作成し ます。メニューからトリガーされる関数は、必要に応じてユーザーに承認を求め、結果的にすべてのApps Scriptサービスを使用することができます。

ということで、ユーザー関数として呼び出す場合は使える関数が限られているのです!

returnで直接返すことが出来ないのです! 残念!

じゃあ、正しくはどう書けばいいの?

値が欲しかったら、setValueを使えばOKです!

ちょっと癖がありますが、慣れれば簡単?

シェアする

  • このエントリーをはてなブックマークに追加

フォローする