Google 电子表格 API 返回错误 "Cannot call method "batchUpdate" 未定义。"

Google Spreadsheet API returning error "Cannot call method "batchUpdate" of undefined."

我正在尝试使用给出的脚本来回答这个问题 google spreadsheet script - Enable filter with a range by 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
}
}];

Logger.log(requests );
         Logger.log(" ssid: " + ssId);
try{
Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}
catch(e){Logger.log(e.message)}
}

这些是我上次尝试 运行 的日志,最后一行是我遇到的错误

[17-09-17 10:32:57:700 BST] [{setBasicFilter={filter={range={endColumnIndex=26, endRowIndex=3756, sheetId=519417536, startColumnIndex=0.0, startRowIndex=0.0}}}}] [17-09-17 10:32:57:701 BST] ssid: 1-05tNvAddY6gwzK9GYC4aMG347XARy_yUXZRcXxgHIk [17-09-17 10:32:57:702 BST] Cannot call method "batchUpdate" of undefined.

ssid正确,sheetId正确。我在资源中打开了 Google 工作表 API - 我在 Google API 控制台

中启用了它

如果有人能告诉我我做错了什么,我将不胜感激

根据您的问题,发现您已经在 API 控制台启用了 Sheets API。但错误显示 Cannot call method "batchUpdate" of undefined.。所以我认为 Sheets API 可能没有在 Advanced Google 服务中启用。请确认如下。

  1. 在脚本编辑器中,select 资源 > 高级 Google 服务
  2. 在出现的对话框中,单击 Google Sheets API v4 的 on/off 开关。请开启。
  3. 单击“确定”按钮。

如果这对您没有用,我很抱歉。

编辑:

在此示例中,UrlFetchApp.fetch() 使用表格 API v4 而不是高级 Google 服务。

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
  }
  }];
  Logger.log(requests );
  Logger.log(" ssid: " + ssId);

  var url = "https://sheets.googleapis.com/v4/spreadsheets/" + ssId + ":batchUpdate"
  var params = {
    method:"post",
    contentType: "application/json",
    headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
    payload: JSON.stringify({"requests": requests}),
    muteHttpExceptions: true,
  };
  var res = UrlFetchApp.fetch(url, params).getContentText();
  Logger.log(res)
}