Skrypt Google Apps onChange nie może przekazać obiektu wyzwalacza do zmiennej [duplicate]
Ten post został zamknięty, ale nigdzie indziej nie udało mi się znaleźć podobnego problemu.
Próbuję opracować skrypt, który ukryje wiersze przed wyzwalaczem onChange (). Gdy komórka zmieni się na „0”, chcę, aby wiersz, w którym znajduje się komórka, stał się ukryty. Komentarze z mojego pierwszego postu nauczyły mnie, że obiekt przekazany z onChange nie zawiera zakresu. Czy istnieje obejście, które rozwiązałoby ten problem?
Mój arkusz kalkulacyjny zawiera arkusz wejściowy dla zaplecza i arkusz wyjściowy dla frontendu, który trafia do klienta. Potrzebuję wyzwalacza onChange, aby dane trafiały do interfejsu użytkownika, aby były ładnie sformatowane do wysyłania pocztą e-mail do klienta. Co najważniejsze, potrzebuję do ukrycia pustych ('0) wierszy.
Jestem nowy i dopiero się uczę, więc to, co napisałem, nie działa, ponieważ obiekty onChange nie zawierają zakresu. Dziękuję Ci.
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);
}
}
Próbowałem też:
function onChange(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Client");
var cell = e.getValue();
if(cell == 0){
sheet.hideRow(cell);
}
}
Odpowiedzi
Nie ma wartości zakresu zwróconej przez wyzwalacz onChange. Oto jak wygląda obiekt zdarzenia.
{"authMode":"FULL","changeType":"INSERT_ROW","source":{},"triggerUid":"","user": {"email":","nickname":""}}
Dodatkowo pamiętaj o zmianie wymaga zainstalowanego wyzwalacza.
Obiekt zdarzenia onChange
Wygląda na to, że masz pomieszane wyzwalacze. W wyzwalane, gdy wystąpi „większe” lub zmiany strukturalne, a nie na zmienionych wartości. Z dokumentów :onChange onEditonChange
Instalowalny wyzwalacz zmiany jest uruchamiany, gdy użytkownik zmodyfikuje strukturę samego arkusza kalkulacyjnego - na przykład dodając nowy arkusz lub usuwając kolumnę.
Na podstawie specyfikacji obiektu zdarzenia widać, że żadna wartość nie jest przekazywana do programisty z onChange
wyzwalacza, a zatem typ funkcji, której szukasz, nie jest łatwy do wykonania.
Chcesz użyć onEdit
wyzwalacza, który będzie działał bliżej tego, czego szukasz. Uruchomi się przy każdej zmianie wartości i da ci nowe i stare wartości. onEdit
jest również „ prostym wyzwalaczem ”, więc nie ma potrzeby instalowania dodatkowych wyzwalaczy, jak to robisz onChange
.
Użycie onEdit
twojego kodu będzie wyglądało mniej więcej tak:
function onEdit(e) {
val range = e.range;
val sheet = SpreadsheetApp.getActiveSheet();
if (e.value == 0) {
var rowNum = e.range.getRow();
sheet.hideRow(rowNum);
}
}