スタンドアローンでもUI作成(GAS)
スプレッドシートやフォームから作成したGoogle Apps Script(GAS)はバインドと言う状態になり、バインドのGASなどと呼ばれます。その一方で、Google Drive上で右クリックをして作成したGASはスタンドアローンのGASなどと呼ばれます。詳しくは省きますが、違いの1つにそれがGoogle Driveに表示されるかされないかがあります。
私が勤めている会社では、見つけやすさと管理のしやすさからGASは基本的にスタンドアローンで作成します。こうすることでサイト内検索に引っかかるようになる、GAS専用フォルダを作成し管理できるメリットがあります。その反面、デメリットの1つとしてスタンドアローンだとSpreadsheet.getUi()でエラーが表示されます。今回はこれを解決しようと思います。
エラー内容
Exception: Cannot call SpreadsheetApp.getUi() from this context.
でお困りなら下記内容をご覧ください。
解決方法
下記にコードと実行順序を示しておきます。正しく行えばエラーが表示されることなくUI操作ができるはずです。
// 1. コード2行目「const ui = SpreadsheetApp.getUi();」をコメントアウトにしままcreateTrigger()を実行
// 2. 該当のスプレッドシートを開き、エディタに戻り、実行履歴で失敗していることを確認
// 3. コメントアウトを解除
// 4. 再度該当のスプレッドシートを開く
const SSID = [スプレッドシートIDを取得];
// const ui = SpreadsheetApp.getUi();
function createTrigger() {
ScriptApp.newTrigger('myFunction')
.forSpreadsheet(SSID)
.onOpen()
.create();
}
function myFunction() {
ui.createMenu('Hello')
.addItem('Hi!', 'test')
.addToUi();
}
function test() {
ui.alert('How are you?');
}
最後に
この方法を見つけてからかなり時間が経っているのでまだできるかわかりませんが、お役に立てれば幸いです。
他にもご要望などあればお気軽にコメントまたはContactからご連絡ください