GASのOnOpenトリガー完全攻略:複数設定や権限の問題を解決する方法
GASのOnOpenトリガーを使って特定の処理を自動化したいです

猫男

catman
オッケー。OnOpenトリガーとその問題について教えてあげよう。
GASのOnOpenトリガーとは?
OnOpenトリガーは、ユーザーがGoogleスプレッドシートやGoogleドキュメントを開いたときに自動で実行されるスクリプトだ。
このトリガーを使えば、ファイルを開いた際に自動的に初期設定をしたり、メニューを追加したりできる。
OnOpenトリガーの基本設定方法
まずは基本的なOnOpenトリガーの設定を見てみよう。
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('新しいメニュー')
.addItem('アイテム1', 'menuItemFunction')
.addToUi();
}
function menuItemFunction() {
SpreadsheetApp.getActiveSpreadsheet().toast('アイテム1が選ばれました');
}
– function onOpen() {} を定義することで、スプレッドシートが開かれたときに実行される。
– SpreadsheetApp.getUi() メソッドを利用して、UIを操作し、メニュー項目を追加する。
OnOpenトリガーが実行されない理由
あれ、でも、僕のOnOpenトリガーはどうして動かないんだろう…

猫男

catman
GASのOnOpenトリガーが動かない理由はいくつかある。例えば、権限の設定やスクリプトの誤りが考えられる。確認してみよう。
- 権限の問題:スクリプトが適切な権限で実行されていないと、OnOpenは動作しない。
- スクリプトのエラーチェック:JavaScriptの構文チェックを行い、エラーが無いか確認する。
- スプレッドシートの動作:開くスプレッドシートでトリガーが紐付いているか確認。
GASのOnOpenを複数設定する
OnOpenを複数設定したい場合にはどうしたらいいんですか?

猫男

catman
OnOpenトリガーは1つしか使えないが、その中で他の関数を呼び出して複数の処理を行わせる方法がある。例えばこうさ。
function onOpen() {
taskOne();
taskTwo();
}
function taskOne() {
Logger.log("タスク1実行中");
}
function taskTwo() {
Logger.log("タスク2実行中");
}
– 複数の処理を実行したいときは、OnOpen内で複数の関数を呼び出す設計にするのが基本だ。
OnEditトリガーとの違い
OnOpenとOnEditの違いってなんですか?

猫男

catman
OnOpenとOnEditはトリガーの発動条件が違う。OnOpenはファイルが開かれたとき、OnEditはスプレッドシートが編集されたときに発動する。その違いを意識するといいぞ。
練習問題
- GASのOnOpenトリガーを利用して「おかえりなさい」というメッセージをログに出力するスクリプトを書いてみよう。
- OnOpenで追加したメニューから関数を呼び出して、スプレッドシートの指定セルに「こんにちは」を書き込むスクリプトを作成しよう。
解答・解説
// 問題1
function onOpen() {
Logger.log("おかえりなさい");
}
// 解説:onOpen内でLogger.logを使いメッセージを出力するシンプルなスクリプトだ。
// 問題2
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('挨拶メニュー')
.addItem('セルにこんにちは', 'writeHello')
.addToUi();
}
function writeHello() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange('A1').setValue('こんにちは');
}
// 解説:メニューを追加して、選択したときにwriteHello関数が呼び出され、A1セルに「こんにちは」が書き込まれる。
なるほど、これでOnOpenトリガーもしっかり理解できました!ありがとうございます、catman!

猫男

catman
どういたしまして。引き続きGASを使ってスクリプトを自動化していこう。何か困ったことがあればまた呼んでくれ。