【问题标题】:Enable data filters on a range with Google Apps Script使用 Google Apps 脚本对范围启用数据过滤器
【发布时间】:2013-08-29 17:11:46
【问题描述】:

有没有办法通过 Google 表格中的脚本为特定范围启用数据过滤器?目前这可以手动完成,但我不想选择一个范围,然后点击“数据”,然后打开过滤器。

我知道过滤器将保留在现有工作表中。但是,我尝试为通过脚本生成的新电子表格应用过滤器。

我的想法是:

function foo() {
  var spreadsheet = SpreadsheetApp.getActive();
  var infoSheet = spreadsheet.insertSheet('sheetName', spreadsheet.getNumSheets());

  infoSheet.getRange(1, 1, 5, 5). -> enable filter?
  ...
}

如何以编程方式实现我的目标?

【问题讨论】:

    标签: filter google-apps-script google-sheets


    【解决方案1】:

    Filters 现在也可以在原生电子表格服务中使用,无需通过“高级服务”激活表格 REST API。

    上述 Sheets REST API 方法,适用于原生 Apps Script:

    function applyFilter() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var dataSheet = ss.getActiveSheet();
    
      var toFilter = dataSheet.getDataRange();
      var filter = toFilter.createFilter();
    
      // Make some criteria to filter with.
      var fcb = SpreadsheetApp.newFilterCriteria();
      /* use FilterCriteria methods */
      fcb.whenCellNotEmpty();
    
      // Filter the range based on the 1st column:
      filter.setColumnFilterCriteria(1, fcb.build());
    }
    

    进一步阅读:

    【讨论】:

    • 应用后,我们如何将过滤后的数据返回到应用脚本中。当我做filter.getRange().getValues() 时,我得到所有数据,而不是过滤的数据
    • @daydreamer 请查看这篇文章tanaikech.github.io/2019/11/08/…您可以使用应用过滤器isRowHiddenByFilter 查看是否隐藏了特定行
    【解决方案2】:

    现在您可以使用谷歌表格高级服务应用过滤器。 首先,您需要打开 Google Sheets API。为此,请按照以下链接中提到的步骤操作:

    https://developers.google.com/sheets/api/quickstart/apps-script

    之后,您可以使用以下功能来应用过滤器。

    function applyFilter() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var ssId = ss.getId();
      var dataSheet = ss.getActiveSheet();
      var lastRow = dataSheet.getLastRow();
      var lastColumn = dataSheet.getLastColumn();
      var sheetId = dataSheet.getSheetId();
    
      var filterSettings = {
        "range": {
          "sheetId": sheetId,
          "startRowIndex": 0,
          "endRowIndex": lastRow,
          "startColumnIndex": 0,
          "endColumnIndex": lastColumn
        }
      };
      var requests = [{
        "setBasicFilter": {
          "filter": filterSettings
        }
      }];
      Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
    }
    

    【讨论】:

      【解决方案3】:

      简短的回答是“否”。 至少根据this open issue,GAS 似乎既不支持获取也不支持设置列的过滤条件。

      另一种解决方案是在 GAS 端进行过滤和排序,并将不同的结果推送到不同的列或工作表中。

      【讨论】:

      • 更新的答案如下。继续滚动。
      猜你喜欢
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      相关资源
      最近更新 更多