onEditの処理で別のスプレッド シートにアクセスする方法

  • 2020.11.15
  • GAS
onEditの処理で別のスプレッド シートにアクセスする方法

google apps scriptで スプレッド シートの編集時に自動実行されるonEdit関数で別のスレッドシートにアクセスする方法を記載します。

onEdit関数とは

スプレッド シートが編集されたことを自動で検知し、実行される関数になります。下記のように記載し、eの中には編集されたセルの情報が格納されています。

function onEdit(e) {
  var value = e.range.getValue();
}

eの中から取得できる情報

編集後の値を取得e.range.getValue()
編集セルの行番号取得e.range.getRow()
編集セルの列番号取得e.range.getColumn()
編集前の値を取得e.oldValue

onEdit(e)で別のスプレッドシートが修正できない時の対応

onEdit(e)関数は編集時に実行されるので

あるスプレッドシートが編集されたらその編集方法を別のスプレッドシートに書き込みたいと思い、そのようにスクリプトを記載すると実はうまく行きません。

下記がうまくいかない時の例です。

function onEdit(e) {
//編集した値を取得
  var value = e.range.getValue();
  
//書き込み先のスプレッドシート、シートを取得
  var outputSs = SpreadsheetApp.openByUrl("書き込み先のURL");
  var outputSheet = outputSs.getSheetByName("シート1");
  
//A1セルに編集内容を書き込み
  outputSheet.getRange(1, 1).setValue(value);
 
}

これをやると、書き込み先のURLからスプレッドシートのオブジェクトを取得するところで処理が終わってしまいます。

自動で実行される処理ないで別のスプレッドシートを参照、修正することは禁止されているようです。

そこで下記のように修正をします。

function onEditfunc(e) {
  var value = e.range.getValue();
  
  var outputSs = SpreadsheetApp.openByUrl("書き込み先のURL");
  var outputSheet = outputSs.getSheetByName("シート1");
  
  outputSheet.getRange(1, 1).setValue(value);
 
}

関数名をonEdit(e)からonEditfunc(e)に変更しただけです。変更後の関数名はonEditでなければ任意の名前で大丈夫です。

これだけでは、編集後自動実行されないので、あとはトリガーを設定してあげます。

トリガーの設定方法は、スクリプトエディタのメニュー→編集→現在のプロジェクトのトリガーをクリックしていきます。

開いた画面でトリガーの追加をクリックし、下記の画像のように設定します。

ポイントは、実行する関数を先ほどonEditから変更した関数名にすること

イベントの種類の選択を編集時に変更することです。

設定をしたら保存を押しましょう.

以上で完了になります。

あとは、スクリプトを記載したセルを編集し、別のスプレッドシートに記載されるか確認しましょう。

・編集前のスプレッドシート

・スプレッドシート編集

・書き込み先スプレッドシート

うまくいきましたね。以上になります。




GASカテゴリの最新記事