Не удается прочитать свойство «setColumnFilterCriteria» с нулевым значением

#google-apps-script

#google-apps-script

Вопрос:

Я сделал копию электронной таблицы с некоторыми макросами. Когда я попытался запустить макросы, я получаю сообщение об ошибке ниже, хотя я вообще не менял скрипт.

«setColumnFilterCriteria» появляется в макросе несколько раз, но здесь впервые

   samsara.getRange(1,B,maxrow,87).activate();
  spreadsheet.getActiveSheet().showColumns(1, 87);
  samsara.getRange(2,G).activate();
  var criteria = SpreadsheetApp.newFilterCriteria()
  .build();
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(G, criteria);var spreadsheet = SpreadsheetApp.getActive();
 

Я думал, что фильтр находится в строке выше последнего.

Ответ №1:

Из вашего сообщения об ошибке Cannot read property “setColumnFilterCriteria” of null я подумал, что в вашей ситуации на листе может не быть фильтра. Когда фильтр не существует на листе, spreadsheet.getActiveSheet().getFilter() возвращается null . При этом возникает такая ошибка. Итак, как насчет следующей модификации?

От:

 spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(G, criteria);var spreadsheet = SpreadsheetApp.getActive();
 

Для:

 var sheet = spreadsheet.getActiveSheet();
var filter = sheet.getFilter();
if (filter) {
  sheet.getFilter().setColumnFilterCriteria(G, criteria);
} else {
  sheet.getRange(2, G, sheet.getLastRow()).createFilter().setColumnFilterCriteria(G, criteria);
}
var spreadsheet = SpreadsheetApp.getActive();
 
  • В этой модификации, когда фильтр не существует, фильтр создается как новый фильтр. Когда фильтр существует, существующий фильтр изменяется.
  • В этой модификации я использовал sheet.getRange(2, G, sheet.getLastRow()) в качестве диапазона фильтра. Если ваш фактический диапазон отличается от него, пожалуйста, измените его.

Ссылки: