Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Анна Никифорова Ученик (211), на голосовании 1 месяц назад
Всем привет, мне нужно что бы гугл таблица посчитала значения только в ячейках определенного цвета, как я понимаю это должна быть формула sumColoredCells, но вот в чём проблема, когда я вставляю скрипт, который нашла в интернете, вылезает непонятная ошибка (скрин прикрепила). Подскажите пожалуйста, как это можно исправить.
Голосование за лучший ответ
Милана Просветленный (33039) 2 месяца назад
Ошибка "TypeError: Cannot read properties of null (reading 'pop')" в Google Apps Script означает, что вы пытаетесь вызвать метод "pop()" на переменной, которая имеет значение null.

В вашем случае, скорее всего, проблема возникает в этих строках:
 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. Можно использовать условный оператор:
 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; // или выдать другое сообщение об ошибке

}



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

Важно:

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

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

Надеюсь, это поможет! Если у вас есть еще вопросы, не стесняйтесь спрашивать.
Анна НикифороваУченик (211) 2 месяца назад
Здравствуйте, спасибо большое за ответ, подскажите пожалуйста в какое конкретное место и что конкретно мне нужно вставить, что бы ошибки не было, а то мне совсем ничего не понятно(
Похожие вопросы