6

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

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

我的想法是:

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

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

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

4

3 回答 3

13

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());
}

进一步阅读:

于 2018-05-05T21:40:03.263 回答
3

现在您可以使用谷歌表格高级服务应用过滤器。首先,您需要打开 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);
}
于 2017-09-01T13:51:21.587 回答
1

一个简短的回答是“不”。至少根据这个开放问题,GAS 似乎既不支持获取也不支持设置列的过滤条件。

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

于 2013-08-29T19:47:51.720 回答