使用Google Apps脚本在范围内启用数据过滤器

时间:2013-08-27 04:55:17

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

是否有办法在Google表格中按脚本启用某个范围的数据过滤器?目前可以手动执行此操作,但我不想选择范围,然后单击“数据”,然后启用过滤器。

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

我的想法是:

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

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

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

3 个答案:

答案 0 :(得分:4)

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

上面的Sheets REST API方法,适用于原生Apps脚本:

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

进一步阅读:

答案 1 :(得分:3)

现在,您可以使用Google工作表高级服务应用过滤器。 首先,您需要启用Google表格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);
}

答案 2 :(得分:2)

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

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