Top.Mail.Ru
Ответы

Очень нужная помощь со скриптом для гугл таблицы.

Всем привет, мне нужно что бы гугл таблица посчитала значения только в ячейках определенного цвета, как я понимаю это должна быть формула sumColoredCells, но вот в чём проблема, когда я вставляю скрипт, который нашла в интернете, вылезает непонятная ошибка (скрин прикрепила). Подскажите пожалуйста, как это можно исправить.

По дате
По рейтингу
Аватар пользователя
Просветленный
10мес

Ошибка "TypeError: Cannot read properties of null (reading 'pop')" в Google Apps Script означает, что вы пытаетесь вызвать метод "pop()" на переменной, которая имеет значение null.

В вашем случае, скорее всего, проблема возникает в этих строках:

123456789
 var countRangeAddress = activeRng.getFormula().match(/=SUM\((.*?)\)/).pop().trim();  
 
var sumValues = activeSht.getRange(countRangeAddress).getValues();  
 
var colorRefAddress = activeRng.getFormula().match(/=COUNTIF\((.*?),/).pop().trim();  
 
var backGround = activeSht.getRange(colorRefAddress).getBackground();  
 
 



Здесь код пытается найти фрагмент формулы "=SUM(...)" и "=COUNTIF(...)", извлечь из них адрес диапазона и цвет ячейки соответственно.

Причина ошибки:

Если в выбранной ячейке нет формулы с "=SUM" или "=COUNTIF", то метод .match() вернет null, и вызов pop() на null приведет к ошибке.

Решение:

Проверить наличие формул:

Убедитесь, что ячейка, на которой запускается скрипт, содержит формулы "=SUM(...)" и "=COUNTIF(...)", где вместо "..." указаны диапазоны ячеек.

Обработка null:

Перед вызовом pop() необходимо проверить, вернул ли match() значение, отличное от null. Можно использовать условный оператор:

123456789101112131415161718192021222324252627282930313233343536373839
 var matchSUM = activeRng.getFormula().match(/=SUM\((.*?)\)/);   
  
if (matchSUM) {   
  
  var countRangeAddress = matchSUM.pop().trim();   
  
  // ... остальной код ...   
  
} else {   
  
  // Обработка случая, когда формула не найдена, например:   
  
  Logger.log("Формула SUM не найдена в выбранной ячейке");   
  
  return; // или выдать другое сообщение об ошибке   
  
}   
  
  
 
// Аналогичная проверка для COUNTIF  
 
var matchCOUNTIF = activeRng.getFormula().match(/=COUNTIF\((.*?),/);  
 
if (matchCOUNTIF) {  
 
  var colorRefAddress = matchCOUNTIF.pop().trim();  
 
  // ... остальной код ...  
 
} else {  
 
  // Обработка случая, когда формула не найдена  
 
  Logger.log("Формула COUNTIF не найдена в выбранной ячейке");  
 
  return; // или выдать другое сообщение об ошибке  
 
}  




Это предотвратит ошибку и позволит скрипту продолжить работу даже если формулы не найдены.

Важно:

Адаптируйте код под ваши конкретные формулы и структуру таблицы.

Перед использованием скрипта протестируйте его на тестовых данных.

Надеюсь, это поможет! Если у вас есть еще вопросы, не стесняйтесь спрашивать.