Сценарий приложений Google, onChange, не может передать объект триггера в переменную [дубликат]
Этот пост был закрыт, но мне не удалось найти аналогичную проблему в другом месте.
Я пытаюсь разработать сценарий, который будет скрывать строки из триггера 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);
}
}
Ответы
Триггер onChange не возвращает значение диапазона. Вот как выглядит объект события.
{"authMode":"FULL","changeType":"INSERT_ROW","source":{},"triggerUid":"","user": {"email":","nickname":""}}
Кроме того, имейте в виду, что onChange требует наличия устанавливаемого триггера.
onChange объект события
Похоже, вы перепутали триггеры. В триггер срабатывает при возникновении «больше» или структурных изменений, а не на измененных значений. Из документов :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);
}
}