Как я могу установить вид фильтра в скрипте листов?

Я определил несколько представлений фильтров и хотел бы применить одно из этих предопределенных представлений фильтров внутри скрипта листов Google.

ПРИМЕЧАНИЕ. Виды фильтров скрыты в меню, и не все пользователи листов знают, где их искать. И наоборот, пользователи, вносящие изменения в фильтры и сортировку, изменяют представление для всех пользователей, если не используются представления фильтров. Выбор фильтров просмотра с помощью заметных кнопок хорошо решает эти проблемы для пользователей любого уровня подготовки.


person Terry Brown    schedule 22.04.2015    source источник
comment
comment
Правда, хотя это предшествовало другому на два года   -  person JSDBroughton    schedule 03.06.2018
comment
согласно stackoverflow.com/a/66117764/2051870, похоже, что (сейчас) это возможно   -  person swv    schedule 25.06.2021
comment
согласно stackoverflow.com/a/66117764/2051870, похоже, что (сейчас) это возможно.   -  person swv    schedule 25.06.2021


Ответы (2)


Это давний запрос функции. Однако в вашем вопросе нет кода для проверки.

https://code.google.com/p/google-apps-script-issues/issues/detail?id=524&q=saved%20filter&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component%20Owner


Обновить

В скрипт приложений добавлены три дополнительных сервиса, связанных с фильтрами: Фильтр классов и Range.createFilter, Sheet.getFilter.

Это не позволит вам получить доступ к сохраненным представлениям фильтров или управлять ими, вы можете использовать аналогичные функции сценария. Однако вашими вариантами кнопок пользовательского интерфейса будут либо исполнители сценариев изображений, либо создание экземпляра приложения на боковой панели. Ни то, ни другое может быть не видно. В равной степени они влияют на лист для всех зрителей.


Дальнейшее обновление

Как отмечено в ответе на новый вопрос, FilterViews теперь можно создавать программно. В этом ответе есть оговорки, касающиеся защищенных диапазонов.

Это по-прежнему не относится к запросу OP для активации определенных FilterView. Их можно создавать, обновлять или удалять, но даже с использованием расширенного API Таблиц они не могут быть активированы программно текущим средством просмотра.

person JSDBroughton    schedule 22.04.2015
comment
Фильтр и режимы фильтров - это не одно и то же. - person Rubén; 31.05.2018
comment
@JSDBroughton Вопрос касался просмотра фильтров, предоставленная вами ссылка Google предназначена для обычных фильтров. - person Stykes; 25.06.2021
comment
Я обновил ссылку на новые функции, добавленные GAS после того, как были заданы вопрос и ответ. Также есть хороший ответ на новый вопрос, который теперь связан с подводными камнями вокруг защищенных диапазонов. - person JSDBroughton; 02.07.2021
comment
Тем не менее, запрошенная функциональность все еще не существует. - person JSDBroughton; 02.07.2021

В приведенном ниже примере для фильтрации просмотра листа используется простой критерий ИСТИНА / ЛОЖЬ, т.е. если значение в ячейке - ЛОЖЬ, строка скрыта. Таким образом, у вас, по-видимому, есть две функции: setFilter и clearFilter. В самом примитивном виде это выглядело бы примерно так:

function setFilter() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var filterSettings = {};

  // The range of data on which you want to apply the filter.
  // optional arguments: startRowIndex, startColumnIndex, endRowIndex, endColumnIndex
  filterSettings.range = {
    sheetId: ss.getSheetByName("sheetName").getSheetId() // provide your sheetname to which you want to apply filter.
  };

  // Criteria for showing/hiding rows in a filter
  // https://developers.google.com/sheets/api/reference/rest/v4/FilterCriteria
  filterSettings.criteria = {};
  var columnIndex = 9; // column that defines criteria [A = 0]
  filterSettings['criteria'][columnIndex] = {
    'hiddenValues': ["FALSE"]
  };

  var request = {
    "setBasicFilter": {
      "filter": filterSettings
    }
  };
  Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId());
}

function clearFilter() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  var sheetId = ss.getSheetByName("sheetName").getSheetId();
  var requests = [{
    "clearBasicFilter": {
      "sheetId": sheetId
    }
  }];
  Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}
person AlexShevyakov    schedule 26.03.2019
comment
Это Filter (своего рода), а не FilterView, поскольку он виден всем пользователям листа - person tehhowch; 26.03.2019