@go4a

Как сделать, чтобы при определенной заливке ячейки в Google sheets цифра из ячейки попадала в итог?

Задача: нужно сделать так, чтобы при определенной заливке ячейки сумма автоматически падала в "итог".

644fdde6a1545268222143.jpeg

На просторах интернета я нашел вот такой скрипт. Сохранил его в 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, но очень хочется реализовать данную фичу. Может быть у кого-то есть ответ на данный вопрос. Буду признателен и благодарен.
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
onEdit не должен этого делать. Не надо приписывать того, чего нет.

Попробуйте onChange, но есть много сомнений, что это вообще возможно на текущий момент.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы