Google apps script 如何从google工作表绑定脚本调用web应用程序来修改工作表

Google apps script 如何从google工作表绑定脚本调用web应用程序来修改工作表,google-apps-script,google-sheets,web-applications,http-status-code-401,Google Apps Script,Google Sheets,Web Applications,Http Status Code 401,我正在尝试制作一个WebApp,它可以由谷歌工作表的绑定脚本触发,在我的权限下修改工作表。我尝试过使用可安装触发器,但我需要比它们提供的功能更多的功能 我从中复制并粘贴代码 并试图使其正常运行,但始终收到相同的错误异常:请求失败https://script.google.com 返回代码401。截断的服务器响应:后跟页面的HTML。我甚至很难获得这项工作的基本版本,上面的链接是我找到的最/唯一相关的指南 下面是我获取基本功能的尝试,它返回与上述相同的错误。如果我在浏览器中打开web应用程序,它会

我正在尝试制作一个WebApp,它可以由谷歌工作表的绑定脚本触发,在我的权限下修改工作表。我尝试过使用可安装触发器,但我需要比它们提供的功能更多的功能

我从中复制并粘贴代码 并试图使其正常运行,但始终收到相同的错误异常:请求失败https://script.google.com 返回代码401。截断的服务器响应:后跟页面的HTML。我甚至很难获得这项工作的基本版本,上面的链接是我找到的最/唯一相关的指南

下面是我获取基本功能的尝试,它返回与上述相同的错误。如果我在浏览器中打开web应用程序,它会成功地将1添加到第一个单元格,但我不知道如何从工作表的绑定脚本正确调用web应用程序

从电子表格的绑定脚本:

function myFunction() {
  UrlFetchApp.fetch('web app url');
}
从web应用程序:

function doGet() {
  var ss = SpreadsheetApp.openById('spreadsheet id');
  var sheet = ss.getSheetByName('Sheet1');
  var cell = sheet.getRange(1, 1);
  cell.setValue(cell.getValue() + 1);
}
我所需要的只是一个有效的例子。在那之后,我可以从那里拿走它。

试试这个:

这是以我的身份运行的,只有我可以访问它。因此,您可能希望修改它

function myFunction() {
  Logger.log(ScriptApp.getService().getUrl());
  var url=ScriptApp.getService().getUrl();
  var params = {
    method: "get",
    headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
  };
  UrlFetchApp.fetch(url,params);
}

function doGet() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  sh.getRange("A1").setValue(sh.getRange("A1").getValue() + 1);
  var html=Utilities.formatString('Process Complete: Current Value: %s',sh.getRange("A1").getValue());
  return HtmlService.createHtmlOutput(html);
}
以下是我添加的范围:

"oauthScopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/spreadsheets"]

现在读一遍,谢谢!他们的大多数示例都使用curl。这是我第一次遇到curl。我所尝试的是必要的还是他们的偏好?在这个项目中,我不想在这一点上学习它,但如果有必要的话,我会的。Curl是不需要的。curl和apps脚本中都提供了示例脚本。您需要在提取请求中发送访问令牌。此外,对DriveApp.getFilesBy进行虚拟调用。。。在访问令牌中包含驱动器作用域。我已经尝试了我能想到的所有代码变体,但我似乎遗漏了一些东西。据我所知,myFunction进入绑定脚本,doGet进入web应用程序。这对我来说没什么意义,因为ScriptApp.getService.getUrl只能在web应用程序中工作,对吗?。所以我尝试用web应用程序的url替换它,但仍然返回401错误。我应该手动输入这些作用域吗,还是应该有一个我丢失的提示?如果清单文件中没有这些作用域,你是否也将它们添加到了清单文件中。我知道了!非常感谢你!