Es gibt einen anderen Weg, den ich gerade erst benutzt habe. Jedes Mal, wenn onEdit() ausgelöst wird, gibt es eine event object (e) zurück, die Ihnen einige wertvolle Informationen darüber liefert, was gerade passiert.
Zum Beispiel gibt es Ihnen die Reichweite, die Sie von e.range abrufen können. Von dort aus können Sie auf viele verschiedene Arten Quer gehen und zB erfahren, welche Zeile bearbeitet wird. Aber es gibt auch mehr hilfreiche Daten in dem Objekt. Es gibt Ihnen den "oldvalue" (e.oldValue) der von Ihnen bearbeiteten Zelle und den neuen Wert (e.value).
Eine Möglichkeit, all diese Informationen zusammenzufassen, wäre, den Bereich zu erhalten, der der gerade bearbeiteten Zeile entspricht, und dann zu prüfen, ob alle Zellen leer sind (aber die gerade bearbeiteten Zellen) und ob kein oldValue vorhanden ist.
Das entspricht nicht unbedingt der letzten Zeile Ihrer Tabelle, sondern eine leere Zeile. Wenn Sie mit konsistent sind, wie Sie Ihre Daten füllen könnte dies für Sie arbeiten:
//val = inserted value (e.value);
//old = old Value (e.oldValue);
//col = number of column being edited
//arr = array with the indexes of the columns that should be completed so as to make a new row [0,1,2...n]
function isInsert(old, val, col, arr){
if((typeof val != "object")&&!old&&(arr.some(isNotEmpty, col)))
return true;
else
return false;
}
function isNotEmpty(el){
if(this == el)
return true;
}
Hallo Mogsdad! Vielen Dank für Ihre Antwort, es ist wirklich cool, so eine präzise Diskussion zu haben. Ich habe versucht, einen Onedit-Trigger für eine Funktion einzurichten, aber tatsächlich wird er nicht aufgerufen, wenn eine Zeile oder Spalte eingefügt wird. Das ist schade, denn eines der Dinge, die ich versuche zu tun, ist, dies sofort zu erkennen, so dass ich die Änderung rückgängig machen kann. Verhindern Sie auf gewisse Weise, dass der Benutzer Zeilen oder Spalten einfügen kann. Gibt es überhaupt keinen Auslöser, mit dem wir in diesen Situationen direkt oder indirekt etwas aufwecken könnten? –
Das Beste, was Sie tun können, ist einen zeitbasierten Auslöser einzurichten - obwohl ich nicht weiß, wie Sie herausfinden würden, was hinzugefügt oder gelöscht wurde. Ich habe meine Antwort mit Links zu einer Reihe von gemeldeten Problemen aktualisiert. Gehen Sie zu ihnen und schalten Sie sie ein, um sich über den Fortschritt zu informieren. Fügen Sie außerdem eigene Kommentare hinzu, um Google zu ermutigen, sie anzusprechen. Wenn Ihre Frage so gut wie erwartet beantwortet wurde, denken Sie daran, die Antwort zu "akzeptieren". (Und ein upvote wird immer geschätzt!) – Mogsdad
Ok danke :) –