【问题标题】:Update Google Sheet "Filter View" w/ New Range使用新范围更新 Google 表格“过滤视图”
【发布时间】:2020-10-15 13:37:11
【问题描述】:

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

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:Sheets 未定义(第 32 行,文件“代码”)”时出现以下错误,其中引用了“Sheets.Spreadsheets .....”行。

关于这是否可能的任何想法?

【问题讨论】:

  • 从您的错误消息中,我认为 Sheets API 可能未启用。那么您能否确认一下 Google 高级服务中是否已经启用了 Sheets API? Ref如果没有开启,请开启后再测试。
  • 启用 Sheets API 后您的问题是否得到解决?
  • 我真傻,我想我肯定需要打开 Sheets API。所以我运行脚本并收到以下错误:GoogleJsonResponseException:API 调用 sheet.spreadsheets.batchUpdate 失败并出现错误:无效的 JSON 有效负载有什么想法吗? @田池
  • @Cooper,我收到以下错误消息:GoogleJsonResponseException: API call to sheet.spreadsheets.batchUpdate failed with error: Invalid JSON payload 有什么想法吗?
  • 更具体地说:GoogleJsonResponseException:对 sheet.spreadsheets.batchUpdate 的 API 调用失败并出现错误:收到无效的 JSON 有效负载。 “请求 [0]”处的未知名称“字段”:找不到字段。 (第 31 行,文件“代码”)

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


【解决方案1】:

根据您的回复,我可以确认在您目前的情况下,Google 高级服务已启用 Sheets API。这样,我可以确认您的错误消息已更改。为了解决新的问题,这次修改怎么样?

修改点:

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

当你的脚本被修改时,请进行如下修改。

修改脚本:

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
}

注意:

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

参考资料:

【讨论】:

  • 你是个天才!这正是我想要的,非常感谢!您不会相信在过去几天试图弄清楚这一点时我的头有多痛。
  • @JPadilla_1990 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多