代码之家  ›  专栏  ›  技术社区  ›  Max Makhrov

删除所有文件管理器标准,但保留过滤器

  •  1
  • Max Makhrov  · 技术社区  · 6 年前

    我想清除所有筛选规则,但保留筛选本身。

    有没有直接快捷的方法?

    我找到的代码是:

    var filter = sheet.getFilter(); 
    

    它获取filter对象,并且filter的选项数为 limited.

    注: filter.remove() 删除此筛选器,但我需要保留它。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Tanaike    6 年前

    您只想删除基本筛选器的条件,而不删除基本筛选器。如果我的理解是正确的,那么使用sheets api如何?示例脚本如下。使用此脚本时,请在高级google服务和api控制台启用sheets api。

    在高级google服务中启用sheets api v4

    • 在脚本编辑器上
      • 资源->高级谷歌服务
      • 打开google sheets api v4

    Enable Sheets API v4 at API console

    • 在脚本编辑器上
      • 资源->云平台项目
      • 查看API控制台
      • 开始时,单击启用API并获取密钥之类的凭据。
      • 在左侧,单击“库”。
      • 在搜索API和服务时,输入“sheets”。然后单击google sheets api。
      • 单击启用按钮。
      • 如果已启用API,请不要关闭。

    如果现在要使用sheets api脚本打开脚本编辑器,则可以通过访问此url为项目启用sheets api 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);
    

    注:

    • 此示例仅通过不提供条件的参数来删除条件,而不删除基本筛选器。
    • 在此示例中,将删除电子表格中所有工作表的条件。因此,如果要删除特定工作表的条件,请修改此示例。

    参考文献:

    如果这不是你想要的,我很抱歉。

        2
  •  3
  •   Max Makhrov    6 年前

    选项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秒],需要 Sheets API

    之后 answer by @Tanaike ,我已经尝试了sheets 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);
    
    }
    

    这个要快得多。

    工具书类