Das Google Apps-Skript onChange kann ein Triggerobjekt nicht an eine Variable übergeben [Duplikat]

Dec 28 2020

Dieser Beitrag wurde geschlossen, aber ich konnte anderswo kein vergleichbares Problem finden.

Ich versuche, ein Skript auszuarbeiten, das Zeilen vor einem onChange () - Trigger verbirgt. Wenn eine Zelle "0" wird, soll die Zeile, in der sich die Zelle befindet, ausgeblendet werden. Kommentare aus meinem ersten Beitrag haben mich gelehrt, dass das von onChange übergebene Objekt keinen Bereich enthält. Gibt es eine Problemumgehung, die dieses Problem lösen würde?

Meine Tabelle enthält ein Eingabeblatt für das Backend und ein Ausgabeblatt für das Frontend, das an den Client geht. Ich benötige einen onChange-Trigger, damit die Daten, die an das Frontend gesendet werden, gut für das E-Mail-Senden an den Client formatiert werden können. Am wichtigsten ist, dass leere ('0) Zeilen ausgeblendet werden müssen.

Ich bin neu und lerne gerade. Was ich geschrieben habe, funktioniert also nicht, weil onChange-Objekte keinen Bereich enthalten. Vielen Dank.

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);
  }
}

Ich habe auch versucht:

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

Antworten

Cooper Dec 28 2020 at 03:57

Es wird kein Bereichswert von einem onChange-Trigger zurückgegeben. So sieht das Ereignisobjekt aus.

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

Beachten Sie außerdem, dass onChange einen installierbaren Trigger erfordert.

onChange-Ereignisobjekt

joshmeranda Dec 28 2020 at 04:00

Es scheint, als hätten Sie die Auslöser verwirrt. Der Trigger wird ausgelöst, wenn eine "größere" oder strukturelle Änderung auftritt, anstatt die geänderten Werte. Aus den Dokumenten :onChange onEditonChange

Ein installierbarer Änderungsauslöser wird ausgeführt, wenn ein Benutzer die Struktur einer Tabelle selbst ändert, z. B. indem er eine neue Tabelle hinzufügt oder eine Spalte entfernt.

Aus den Ereignisobjektspezifikationen geht hervor, dass vom onChangeTrigger kein Wert an den Programmierer übergeben wurde und daher die Art der gesuchten Funktionalität nicht einfach ist.

Sie möchten den onEditAuslöser verwenden, der näher an dem funktioniert, was Sie suchen. Es wird bei jeder Wertänderung ausgelöst und gibt Ihnen die neuen und alten Werte. onEditist auch ein " einfacher Trigger ", sodass Sie keine zusätzlichen Trigger installieren müssen, wie Sie es tun onChange.

Die Verwendung onEditIhres Codes sieht ungefähr so ​​aus:

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

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