Задача: нужно сделать так, чтобы при определенной заливке ячейки сумма автоматически падала в "итог".
На просторах интернета я нашел вот такой скрипт. Сохранил его в App Script, создал триггер по инструкции.
function sumColoredCells(sumRange,colorRef) {
var activeRg = SpreadsheetApp.getActiveRange();
var activeSht = SpreadsheetApp.getActiveSheet();
var activeformula = activeRg.getFormula();
var countRangeAddress = activeformula.match(/\((.*)\,/).pop().trim();
var backGrounds = activeSht.getRange(countRangeAddress).getBackgrounds();
var sumValues = activeSht.getRange(countRangeAddress).getValues();
var colorRefAddress = activeformula.match(/\,(.*)\)/).pop().trim();
var BackGround = activeSht.getRange(colorRefAddress).getBackground();
var totalValue = 0;
for (var i = 0; i < backGrounds.length; i++)
for (var k = 0; k < backGrounds[i].length; k++)
if ( backGrounds[i][k] == BackGround )
if ((typeof sumValues[i][k]) == 'number')
totalValue = totalValue + (sumValues[i][k]);
return totalValue;
};
function onEdit(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
var formula = range.getFormula();
var colorRef = formula.match(/;(.*)\)/).pop().trim();
var sumRange = formula.match(/\((.*)\,/).pop().trim();
if (colorRef && sumRange && range.getRow() == sheet.getRange(sumRange).getRow() && range.getColumn() == sheet.getRange(sumRange).getColumn()) {
range.setValue(sumColoredCells(sumRange, colorRef));
}
}
И в целом он работает, но не делает это автоматически. То есть каждый раз мне нужно либо пересохранить сам код или заново вбивать цифры в залитые ячейки. Хотя, по идее function onEdit как раз должен выполнять сие действие автоматически. Я не силен в JS, но очень хочется реализовать данную фичу. Может быть у кого-то есть ответ на данный вопрос. Буду признателен и благодарен.