earthpg:GAS専門のプログラミングスクール

GASのOnOpenトリガー完全攻略:複数設定や権限の問題を解決する方法

GASのOnOpenトリガーを使って特定の処理を自動化したいです
猫男
猫男
catman
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
catman
GASのOnOpenトリガーが動かない理由はいくつかある。例えば、権限の設定やスクリプトの誤りが考えられる。確認してみよう。
  1. 権限の問題:スクリプトが適切な権限で実行されていないと、OnOpenは動作しない。
  2. スクリプトのエラーチェック:JavaScriptの構文チェックを行い、エラーが無いか確認する。
  3. スプレッドシートの動作:開くスプレッドシートでトリガーが紐付いているか確認。

GASのOnOpenを複数設定する

OnOpenを複数設定したい場合にはどうしたらいいんですか?
猫男
猫男
catman
catman
OnOpenトリガーは1つしか使えないが、その中で他の関数を呼び出して複数の処理を行わせる方法がある。例えばこうさ。

function onOpen() {
  taskOne();
  taskTwo();
}

function taskOne() {
  Logger.log("タスク1実行中");
}

function taskTwo() {
  Logger.log("タスク2実行中");
}

– 複数の処理を実行したいときは、OnOpen内で複数の関数を呼び出す設計にするのが基本だ。

OnEditトリガーとの違い

OnOpenOnEditの違いってなんですか?
猫男
猫男
catman
catman
OnOpenOnEditはトリガーの発動条件が違う。OnOpenはファイルが開かれたとき、OnEditはスプレッドシートが編集されたときに発動する。その違いを意識するといいぞ。

練習問題

  1. GASのOnOpenトリガーを利用して「おかえりなさい」というメッセージをログに出力するスクリプトを書いてみよう。
  2. 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
catman
どういたしまして。引き続きGASを使ってスクリプトを自動化していこう。何か困ったことがあればまた呼んでくれ。