Google App Script(GAS)でプログラムを実行したときに、以下のようなエラーが発生することがあります。
ここではこのエラーの発生原因と対処法について解説しています。
エラーの内容
このエラーは、このコンテクスト(実行しているAppScriptの処理)でDocumentApp.getUi()やSpreadsheetApp.getUi()、FormApp.getUi()、SlidesApp.getUi()を呼び出せませんというものです。
エラーの原因
GoolgeのAppScriptはスプレッドシートで使われることが多いですが、実はスプレッドシートだけでなくGoogleドキュメントやスライド、フォームでも使うことができます。
Googleのスプレッドシート、ドキュメント、スライド、フォームをオブジェクトとして取得するのがSpreadsheetAppなどです。これらのオブジェクトクラスが現在AppScriptを実行しているサービスと一致している必要があります。
例えば、スプレッドシートでAppScriptを組んでいるときに、Googleドキュメントを取得するDocumentAppクラスを使うと当然使えないということになります。
クラス | 対象のサービス |
---|---|
SpreadsheetApp | スプレッドシート |
DocumentApp | ドキュメント |
SlidesApp | スライド |
FormApp | フォーム |
よくある発生原因
このエラーが発生するあるあるは、Google公式のAppScriptのヘルプページにあるコードをコピペしたときに発生しがちです。
AppScript自体はスプレッドシートやドキュメントやフォームなどに属するわけではなくどれでも使える汎用的なものです。
なので、コードの例もスプレッドシートを対象にしたものもあれば、ドキュメントを対象にしたものもあるわけです。
例えば、Enum ButtonSetというページのサンプルコードは以下のようになっています。
// Display a dialog box with a message and "Yes" and "No" buttons.
var ui = DocumentApp.getUi();
var response = ui.alert('Are you sure you want to continue?', ui.ButtonSet.YES_NO);
// Process the user's response.
if (response == ui.Button.YES) {
Logger.log('The user clicked "Yes."');
} else {
Logger.log('The user clicked "No" or the dialog\'s close button.');
}
冒頭でDocumentApp.getUi();
を使っています。
スプレッドシートでGASを組んでいるときに、このヘルプページにたどり着き、このコードをコピペして実行すると、以下のエラーが発生するわけです。
エラー対処法
このエラーが発生したときは自分の使っているサービスと指定したクラスが一致しているか確認してみてください。
クラス | 対象のサービス |
---|---|
SpreadsheetApp | スプレッドシート |
DocumentApp | ドキュメント |
SlidesApp | スライド |
FormApp | フォーム |