使用新范围更新Google表格“过滤器视图”

时间:2020-06-25 06:56:13

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

我有一个电子表格,其中设置了各种过滤器视图。通常,这很好用,但偶尔会添加新行,而我必须在每个过滤器视图中手动更新范围。我尝试过在线搜索解决方案,并想出了可能会更新范围的以下代码:

function UpdateFilterView() {
    var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
    //for each (var dataSheet in sheets){ 
      var lastRow = dataSheet.getLastRow();
      var lastColumn = dataSheet.getLastColumn();
      var sheetId = dataSheet.getSheetId();
      var filterSettings = {
        "filterViewId": "319575141",
        "range":{
        "sheetId": sheetId,
        "startRowIndex": 1,
        "endRowIndex": lastRow,
        "startColumnIndex": 1,
        "endColumnIndex": lastColumn
        }
       //}
      };


var requests = [{
  "fields": "*",
  "updateFilterView":{
  "filter": filterSettings
  }
 }];
 
  
 Sheets.Spreadsheets.batchUpdate({"requests":requests},sheetId);

 }

我从发现的帖子(here)中获取了大部分代码,但是由于某种原因,它不会更新指定的过滤器。我想念什么吗?另外,当我运行代码“ ReferenceError:未定义工作表(第32行,文件“代码”)时,出现以下错误,该代码引用行“ Sheets.Spreadsheets .....”。

有什么想法甚至可能吗?

1 个答案:

答案 0 :(得分:2)

从您的答复中,我可以确认,在您当前的情况下,高级Google服务已启用Sheets API。这样,我可以确认您的错误消息已更改。为了解决新问题,如何进行此修改?

修改点:

  • 请将sheetId中的Sheets.Spreadsheets.batchUpdate({"requests":requests},sheetId);修改为电子表格ID。
  • 请在"fields": "*"的对象中包含updateFilterView

修改脚本后,请进行以下修改。

修改后的脚本:

function UpdateFilterView() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();  // Added
  var dataSheet = ss.getSheetByName('Data');  // Modified
  var lastRow = dataSheet.getLastRow();
  var lastColumn = dataSheet.getLastColumn();
  var sheetId = dataSheet.getSheetId();
  var filterSettings = {
    "filterViewId": "319575141",
    "range":{
      "sheetId": sheetId,
      "startRowIndex": 1,
      "endRowIndex": lastRow,
      "startColumnIndex": 1,
      "endColumnIndex": lastColumn
    }
  };
  var requests = [{
    "updateFilterView":{
      "filter": filterSettings,
      "fields": "*",  // Modified
    }
  }];
  Sheets.Spreadsheets.batchUpdate({"requests":requests}, ss.getId());  // Modified
}

注意:

  • filterViewId中的319575141不正确时,会发生类似Invalid value at 'requests[0].update_filter_view.filter.filter_view_id的错误。请注意这一点。

参考文献: