首页 > 解决方案 > 如何将循环集成到我的代码中,将我的请求应用于每个 filterViewId?

问题描述

目前执行后我的代码遇到两个问题:

API call to sheets.spreadsheets.batchUpdate failed with error: Invalid JSON payload received. 
Unknown name "fields" at 'requests[0]': Cannot find field. 
Invalid value at 'requests[0].update_filter_view.filter.filter_view_id' (TYPE_INT32), "*" (line 27, file "macros")

第一个问题是我的请求没有识别“字段”——我不知道为什么会这样。

第二个问题,也是发布此问题的主要原因是,当我引用的只是“*”作为更新工作表中所有过滤器视图的方法时,filterViewId 正在寻找一个整数。如何将循环集成到我的代码中,以便它获取第一个 filterViewId 并应用请求,然后继续下一个?

function UpdateFilterView() {
    var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();  
    for each (var dataSheet in sheets){ 
      var lastRow = dataSheet.getLastRow();
      var lastColumn = dataSheet.getLastColumn();
      var sheetId = dataSheet.getSheetId();
      var filterSettings = {
        "filterViewId": "*",
        "range":{
        "sheetId": sheetId,
        "startRowIndex": 0,
        "endRowIndex": lastRow,
        "startColumnIndex": 0,
        "endColumnIndex": lastColumn
        }
       }
      };


var requests = [{
  "fields": "*",
  "updateFilterView":{
  "filter": filterSettings
  }
 }];

 Sheets.Spreadsheets.batchUpdate({"requests":requests},sheetId);

 }

标签: jsongoogle-apps-scriptgoogle-sheetsgoogle-sheets-api

解决方案


  1. 您的请求无法识别fields,因为fields需要进入"updateFilterView":{...}您可以在文档中看到的内容。
  2. 如果您的过滤器 ID 随着工作表编号的增加而增加(例如"filterViewId": 1,对于第一张工作表、"filterViewId": 2第二张工作表等),您可以分配 filterview一个计数器变量,该变量在每次循环迭代期间增加。

例子:

var i=0;
for each (var dataSheet in sheets){ 
  i++;
  ...
  var filterSettings = {
     "filterViewId": i,
        ...

或者,您也可以用循环替换for each循环for(var i=1; i<=sheet.length;i++)- 然后您迭代sheetsfilterview同时进行。


推荐阅读