#google-apps-script #google-sheets
Вопрос:
У меня есть эта функция, которая возвращает шестнадцатеричный код цвета фона указанной ячейки. Пока все в порядке, но мне нужно, чтобы это реагировало на изменения цвета фона указанной ячейки. Как бы то ни было, каждый раз, когда цвет фона ячейки меняется, я должен снова вызывать функцию, чтобы она обратила внимание на то, что цвет фона изменился. Есть ли какой-нибудь способ заставить эту функцию реагировать на изменения фона указанной ячейки?
function color(input) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeRange = SpreadsheetApp.getActiveRange();
var formula = activeRange.getFormula();
var address = formula.substr(7,2);
var cell = ss.getRange(address);
var result = cell.getBackground();
return resu<
}
Комментарии:
1. Для фиксации таких изменений следует использовать события onEdit или onChange.
2. Я не думаю, что изменения в фоновом режиме запускают триггеры onEdit или onChange
3. @Ismail я еще не пробовал onEdit или onChange, я думаю, он должен распознавать изменения в фоновом режиме, но я боюсь, что он может быть слишком жадным и запускать функцию при любом изменении или редактировании, внесенном в электронную таблицу, а не только из-за изменения цвета фона.
4. Событие (e) предоставляет вам информацию о том, какая ячейка или диапазон были изменены. Он также предоставляет вам информацию об измененном значении и предыдущем значении.
5. e.диапазон даст вам информацию о том, какая ячейка, затем вы можете проверить, является ли ячейка тем, что вам нужно проверить. Если это верно, то вы можете соответствующим образом проверить изменения значения или формата.
Ответ №1:
onEdit() не запускается из-за изменений фона, но, как выясняется, onChange есть, а тип изменения-ФОРМАТ
Вот копия объекта события:
{"authMode":"FULL","changeType":"FORMAT","source":{},"triggerUid":"","user":{"email":"","nickname":""}}
Но я не думаю, что есть способ воспользоваться этим преимуществом с помощью пользовательской функции, если здесь находится то, что вы подразумеваете под пользовательской функцией
Попробуйте это:
function onMyChange(e) {
if(e.changeType == 'FORMAT') {
SpreadsheetApp.getActive().toast(SpreadsheetApp.getActiveRange().getA1Notation());
}
}
Комментарии:
1. тх! Это может сработать, но мне нужно будет также проверить диапазон, и, похоже, он не является частью этого объекта события. Может быть, объединение триггеров может найти обходной путь? В противном случае я заставлю пользователей редактировать ячейку при изменении формата и использовать триггер onEdit(e), как предложил @Ismail в комментарии
2. Диапазон не является частью объекта события
3. Возможно, нет необходимости принуждать пользователей к редактированию. Возможно, вы можете просто получить текущий активный диапазон.
Ответ №2:
Вы должны попробовать это
function onChange(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
console.log(ss.getCurrentCell().getA1Notation() " onchange" );
}
Этот журнал будет доступен вам в разделе журналы выполнения триггеров.