Вариант № 1.Медленно [~ 16 секунд], API не требуется
Я пробовал этот код:
function deleteFilterCriterias(sheet)
{
var filter = sheet.getFilter();
if (!(filter)) { return -1; }
var rangeF = filter.getRange();
var cols = rangeF.getWidth();
var col = rangeF.getColumn();
for (var i = col; i <= cols; i++)
{
// remove filter criteria for each column
filter.removeColumnFilterCriteria(i)
}
return 0;
}
Но мне это кажется неуклюжим.
Вариант № 2.Быстро [~ 0,3 с], нужно API листов
После ответа @ Tanaike я попробовал API листов.
МойКод для сброса фильтра на одном листе:
function deleteFilterCriterias2(sheet)
{
var ssId = sheet.getParent().getId();
var range = sheet.getFilter().getRange();
var rowStart = range.getRow() - 1;
var colStart = range.getColumn() - 1;
// settings to reset filter
var filterSettings = {
"range": {
"sheetId": sheet.getSheetId(),
"startRowIndex": rowStart,
"endRowIndex": range.getHeight() + rowStart,
"startColumnIndex": colStart + colStart,
"endColumnIndex": range.getWidth()
}
};
var requests = [{
"setBasicFilter": {
"filter": filterSettings
}
}];
// api request
Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}
Этот намного быстрее.
Ссылки