Фильтры массового удаления в Google Таблицах

Я нашел этот старый thread, но, похоже, не удается заставить работать ни один из методов.

Проблема. У меня есть таблица, которой пользуются десятки людей, и со временем было создано ›200 представлений с фильтрами. Я хочу массово удалить ВСЕ Filter View с одного листа в книге.

Я пробовал этот метод после включения API Google Таблиц. Он работает, но, увы, все Фильтры остаются.

function clearFilter() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var ssId = ss.getId();
    var sheetId = ss.getActiveSheet().getSheetId();
    var requests = [{
        "clearBasicFilter": {
        "sheetId": sheetId
        }
    }];
    Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}

Спасибо всем

Изображение фильтров просмотра:

Изображение просмотров фильтра


person Jesse Ericksen    schedule 11.02.2019    source источник


Ответы (1)


Проблема:

  • Вы отправляете запрос на очистку фильтра, который очищает только текущий фильтр.

Решение:

  • Вместо этого вы должны отправить deleteFilterView запрос

Образец кода:

function delFilterViews() {
  var ssId = SpreadsheetApp.getActive().getId();
  Sheets.Spreadsheets.batchUpdate(
    {
      requests: Sheets.Spreadsheets.get(ssId, {
        ranges: 'Sheet1', //Sheet in which filterviews are present
        fields: 'sheets/filterViews/filterViewId',
      }).sheets[0].filterViews.map(function(e) {
        return { deleteFilterView: { filterId: e['filterViewId'] } }; //create a new delete filter view request for each filter view present in sheet1
      }),
    },
    ssId
  );
}

Использованная литература:

person TheMaster    schedule 11.02.2019
comment
Большое спасибо! Это сработало отлично и очистило все настраиваемые представления фильтров за один раз! - person Jesse Ericksen; 11.02.2019
comment
Это удалит все просмотры фильтров на листе. Как я могу удалить только те фильтры, для которых не задано имя? например - Некоторое регулярное выражение, например Filter*? - person Dave; 11.04.2020
comment
@ Дэйв. Да. Вы бы использовали Array.filter, а затем .map на filterViews вместо просто .map. Если вы не можете выполнить задание, приложив разумные усилия, задайте новый вопрос. - person TheMaster; 11.04.2020