#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())
в качестве диапазона фильтра. Если ваш фактический диапазон отличается от него, пожалуйста, измените его.