javascript - 容器绑定(bind)脚本出​​现错误 "Expected OAuth 2 access token"

标签 javascript google-apps-script google-sheets google-sheets-api

我只想过滤 Google 工作表中的一个值,如 this question/answer .

我已经激活了sheets-api并查看了文档,如何添加oauth2验证。结论是,它应该自动发生,因为脚本是容器绑定(bind)的。

var ss = SpreadsheetApp.getActiveSpreadsheet();

SpreadsheetApp.setActiveSheet(ss.getSheetByName('Aufgaben')); // change active sheet

var filterCriteria = {"type":"TEXT_CONTAINS","values":[{"userEnteredValue": "0001" }]}; // set filter

var filterSettings = {};
filterSettings.range = {sheetId: ss.getSheetByName('Aufgaben').getSheetId(), startRowIndex: 1};
filterSettings.criteria = {};
var columnIndex = 4;

filterSettings['criteria'][columnIndex] = {'condition': filterCriteria}; // Modified

var request = {setBasicFilter: {filter: filterSettings}};
Browser.msgBox(JSON.stringify({'requests': [request]})); //only works, when this line is added!
Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId()); `

该代码有效,但仅当我在 Sheets.Spreadsheets.batchUpdate() 上方添加 Browser.msgBox 一行时才有效。否则我会收到此错误:请求缺少所需的身份验证凭据。需要 OAuth 2 访问 token 、登录 cookie 或其他有效的身份验证凭据。请参阅https://developers.google.com/identity/sign-in/web/devconsole-project 。 在 onEdit(test:127)

因为我已经花了几个小时试图解决这个问题。 谢谢。

最佳答案

也许

// set filter

造成问题吗?

这对我来说没有 oauth2 验证:

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  SpreadsheetApp.setActiveSheet(ss.getSheetByName('Aufgaben')); // change active sheet

  var filterCriteria = {"type":"TEXT_CONTAINS","values":[{"userEnteredValue": "4210"}]}; // Modified

  var filterSettings = {};
  filterSettings.range = {sheetId: ss.getSheetByName('Aufgaben').getSheetId(), startRowIndex: 1};
  filterSettings.criteria = {};
  var columnIndex = 4;

  filterSettings['criteria'][columnIndex] = {'condition': filterCriteria}; // Modified

  var request = {setBasicFilter: {filter: filterSettings}};
  Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId());
<小时/>

编辑

我无法使用您提供的代码重现该问题。即使有消息框,我也收到错误。

如果您在编辑工作表时触发过滤功能,您可能需要尝试某个版本的 Google Apps 脚本电子表格服务:

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var criteria = SpreadsheetApp.newFilterCriteria().whenTextContains("0001").build();
  var lastRow = sheet.getLastRow();
  var lastCol = sheet.getLastColumn();
  var range = sheet.getRange(2, 1, lastRow - 1, lastCol);
  range.createFilter().setColumnFilterCriteria(4, criteria);
}

引用资料

newFilterCriteria()

whenTextContains(text)

createFilter()

setColumnFilterCriteria(columnPosition, filterCriteria)

关于javascript - 容器绑定(bind)脚本出​​现错误 "Expected OAuth 2 access token",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57344419/

相关文章:

javascript - 当多个用户更新 Google Wave 小工具中的共享状态时,我可以使用哪些 javascript 工具或技术来管理冲突解决?

google-apps-script - 列出 BigQuery 中的计划查询

email - 从谷歌脚本中的单元格获取值

string - 如何对具有特定部分字符串的单元格进行计数?

javascript - 有没有办法编写一个命令来查找和显示 Google 表格中的一行内容?

javascript - Google 更新和 AngularJS/JavaScript 网站

javascript - document.getElementById ('myControl' ).focus() 在 PhoneGap 中不起作用

javascript - 'greater than or equal' 和 'equality' 运算符关于 'undefined' 的行为不一致

mysql - 如何从 google apps 脚本 .gs 返回 jdbc ResultSet 到 html 文件

javascript - Google 脚本 - 从网站论坛解析 HTML - 并将数据写入工作表