Google Apps ScriptのonChangeは、トリガーオブジェクトを変数に渡すことができません[重複]

Dec 28 2020

この投稿は閉じられましたが、他の場所で同等の問題を見つけることができませんでした。

onChange()トリガーから行を非表示にするスクリプトを作成しようとしています。セルが「0」になったら、そのセルが入っている行を非表示にします。私の最初の投稿からのコメントは、onChangeから渡されたオブジェクトに範囲が含まれていないことを教えてくれました。この問題を解決する回避策はありますか?

私のスプレッドシートには、バックエンド用の入力シートと、クライアントに送信されるフロントエンド用の出力シートがあります。onChangeトリガーが必要です。これにより、データがフロントエンドに送られるときに、クライアントに電子メールで送信するための適切な形式になります。最も重要なのは、空の( '0)行を非表示にする必要があることです。

私は新しく、学習しているだけなので、onChangeオブジェクトに範囲が含まれていないため、私が書いたものは機能しません。ありがとうございました。

function onChange(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Client");
  var cell = e.range;
  var VALUE = cell.getValue(); 
  if(VALUE == 0){
        sheet.hideRow(cell);
  }
}

私も試しました:

function onChange(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Client");
  var cell = e.getValue(); 
  if(cell == 0){
        sheet.hideRow(cell);
  }
}

回答

Cooper Dec 28 2020 at 03:57

onChangeトリガーによって返される範囲値はありません。イベントオブジェクトは次のようになります。

{"authMode":"FULL","changeType":"INSERT_ROW","source":{},"triggerUid":"","user": {"email":","nickname":""}}

さらに、onChangeにはインストール可能なトリガーが必要であることに注意してください。

onChangeイベントオブジェクト

joshmeranda Dec 28 2020 at 04:00

トリガーが混乱しているようです。「大きい」または構造変化がなく変更した値よりも、発生するトリガーが起動。ドキュメントから:onChange onEditonChange

インストール可能な変更トリガーは、ユーザーがスプレッドシート自体の構造を変更したときに実行されます。たとえば、新しいシートを追加したり、列を削除したりします。

イベントオブジェクトの仕様から、onChangeトリガーからプログラマーに渡される値がないことがわかります。そのため、探している機能のタイプを簡単に実行することはできません。

あなたonEditはあなたが探しているものにより近く機能するトリガーを使いたいです。値が変更されると起動し、新しい値と古い値が表示されます。onEditは「単純なトリガー」でもあるため、のように追加のトリガーをインストールする必要はありませんonChange

onEditコードを使用すると、次のようになります。

function onEdit(e) {
  val range = e.range;
  val sheet = SpreadsheetApp.getActiveSheet();

  if (e.value == 0) {
    var rowNum = e.range.getRow();
    sheet.hideRow(rowNum);
  }
}