Удалить все критерии фильтра, но сохранить фильтр - PullRequest
0 голосов
/ 30 мая 2018

Я хочу очистить все правила фильтрации, но оставить сам фильтр.

Существует ли прямой и быстрый способ сделать это?

Код, который я нашел:

var filter = sheet.getFilter(); 

Он получает объект фильтра, и число опций, которые у меня есть с фильтром #, ограничено .

Примечание: filter.remove() удаляет этот фильтр, но мне нужночтобы сохранить его.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы хотите удалить только критерии базовых фильтров, пока базовый фильтр не удален.Если мое понимание правильное, как насчет использования Sheets API?Пример сценария выглядит следующим образом.При использовании этого сценария, пожалуйста, включите Sheets API в Advanced Services и консоли API.

Включите Sheets API v4 в Advanced Google Services

  • В редакторе сценариев
    • Ресурсы -> Расширенные службы Google
    • Включить API Google Sheets v4

Включить API Sheets v4 на консоли API

  • В редакторе сценариев
    • Ресурсы -> Проект Cloud Platform
    • Просмотр консоли API
    • На начальном этапе нажмите Включить API и получите учетные данные, например ключи.
    • С левой стороны щелкните Библиотека.
    • В поле Поиск API и служб введите «листы».И нажмите Google Sheets API.
    • Нажмите кнопку Включить.
    • Если API уже включен, пожалуйста, не выключайте.

Если вы сейчас открываете редактор сценариев со сценарием для использования Sheets API, вы можете включить Sheets API для проекта, открыв этот URL-адрес https://console.cloud.google.com/apis/library/sheets.googleapis.com/

Пример сценария:

var id = SpreadsheetApp.getActiveSpreadsheet().getId();
var filters = Sheets.Spreadsheets.get(id, {fields: "sheets/basicFilter"});
var resource = {requests: filters.sheets.filter(function(e){return Object.keys(e).length}).map(function(e){return {setBasicFilter: {filter: {range: e.basicFilter.range}}}})};
Sheets.Spreadsheets.batchUpdate(resource, id);

Примечание:

  • В этом примере удаляются только критерии, не задавая параметры для критериев, в то время как базовый фильтр не удаляется.
  • В этом примере критерии всех листов втаблицы удалены.Поэтому, если вы хотите удалить критерии для конкретного листа, измените этот образец.

Ссылки:

Если это не то, что вы хотите, извините.

0 голосов
/ 30 мая 2018

Вариант № 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);

}

Этот намного быстрее.

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...