Javascript “错误”;预期OAuth 2访问令牌“;关于容器绑定脚本

Javascript “错误”;预期OAuth 2访问令牌“;关于容器绑定脚本,javascript,google-apps-script,google-sheets,google-sheets-api,Javascript,Google Apps Script,Google Sheets,Google Sheets Api,我只想为一个值过滤google工作表,如中所示 我已经激活了sheets api并浏览了文档,了解了如何添加oauth2验证。结论是,它应该自动发生,因为脚本是绑定到容器的 var ss = SpreadsheetApp.getActiveSpreadsheet(); SpreadsheetApp.setActiveSheet(ss.getSheetByName('Aufgaben')); // change active sheet var filterCriteria = {"type"

我只想为一个值过滤google工作表,如中所示

我已经激活了sheets api并浏览了文档,了解了如何添加oauth2验证。结论是,它应该自动发生,因为脚本是绑定到容器的

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访问令牌、登录cookie或其他有效身份验证凭据。看见 在onEdit(测试:127)

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

也许

//设置过滤器

是什么导致了问题

这在没有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);
}
参考文献

也许

//设置过滤器

是什么导致了问题

这在没有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);
}
参考文献


我无法理解
代码的工作原理,但只有在Sheets.Spreadsheets.batchUpdate()上方添加Browser.msgBoxone行时,代码才能工作。
。当脚本由脚本编辑器运行时,它可以工作。但是,如果它是由简单触发器和自定义函数运行的,则会发生这种错误。自定义函数无法使用
浏览器.msgBox
。因此,如果使用简单触发器运行它,那么修改为可安装触发器如何?此时,请修改函数名,以防重复运行。如果我误解了您的情况,我道歉。我的代码是由
onEdit()
触发的。我插入了
Browser.msgBox…
作为检查参数的简单方法,突然,代码没有产生错误,这是偶然的。我只是不明白,这怎么能防止这个错误呢?如果我注释掉或删除
Browser.msgBox…
我会得到oauth错误。甚至可以使用
Browser.msgBox('hello')
。非常奇怪。您需要“可安装”的编辑触发器,而不是简单的触发器。谢谢您的回复。首先,我不得不为我糟糕的英语水平道歉。使用脚本后,将解决您的问题。@Tanaike我感谢您的帮助。我不知道为什么,但使用sheets api时,我没有让它工作。但对我来说是有效的——谷歌应用脚本电子表格服务。我无法理解
代码的工作原理,但只有在Sheets.Spreadsheets.batchUpdate()
上方添加Browser.msgBoxone行时才有效。当脚本由脚本编辑器运行时,它可以工作。但是,如果它是由简单触发器和自定义函数运行的,则会发生这种错误。自定义函数无法使用
浏览器.msgBox
。因此,如果使用简单触发器运行它,那么修改为可安装触发器如何?此时,请修改函数名,以防重复运行。如果我误解了您的情况,我道歉。我的代码是由
onEdit()
触发的。我插入了
Browser.msgBox…
作为检查参数的简单方法,突然,代码没有产生错误,这是偶然的。我只是不明白,这怎么能防止这个错误呢?如果我注释掉或删除
Browser.msgBox…
我会得到oauth错误。甚至可以使用
Browser.msgBox('hello')
。非常奇怪。您需要“可安装”的编辑触发器,而不是简单的触发器。谢谢您的回复。首先,我不得不为我糟糕的英语水平道歉。使用脚本后,将解决您的问题。@Tanaike我感谢您的帮助。我不知道为什么,但使用sheets api时,我没有让它工作。但对我来说是有效的——谷歌应用脚本电子表格服务。谢谢你的回复,@ADW。这是我的错误,在代码中间插入了代码> //设置过滤器< /代码>,而不是替换<代码> /修改过的<代码>。我在这里和谷歌上都找不到你为使用谷歌应用脚本电子表格服务提供的功能。谢谢。谢谢你的回复,@ADW。这是我的错误,在代码中间插入了代码> //设置过滤器< /代码>,而不是替换<代码> /修改过的<代码>。我在这里和谷歌上都找不到你为使用谷歌应用脚本电子表格服务提供的功能。非常感谢。