首页 > 解决方案 > 从 GAS 请求 WebApp(在 GSheets 中)

问题描述

过去几天我花了很多时间阅读有关我的主题的帖子,但我没有找到解决方案。

  1. A 创建了一个简单的(独立的)WebApp 来修改表格(本示例中的 appendRow)。此 WebApp 以我的身份执行,每个人都可以访问:

function doGet(e) {
  Logger.log("Call WebApi ok");
  //var idSheet = e.parameter.idu;
  var idSheet = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
  //Logger.log(idSheet);
  var ss = SpreadsheetApp.openById(idSheet);
  var sh = ss.getSheetByName('tab1');
  sh.appendRow(["Test"]);
}

  1. 在 Google 表格中,我创建了(调用者)脚本。

function go() {
  var url = "https://script.google.com/a/AAAAA/macros/s/XXXXXXXXXXXXXXXX/exec";
  var params = {
    method: "get",
    headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
  };
  UrlFetchApp.fetch(url,params);
}

调用者脚本在 manifest 中具有以下作用域:

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

-> 如果我使用与 WebApp 所有者不同的帐户执行调用者脚本,则它不起作用。我收到 403 错误。

-> 但是,如果我在 Chrome 中打开 Publish WebApp 的 URL,它可以工作!

你知道为什么它不能从表格的调用者脚本中工作吗?

谢谢!路易斯

标签: google-apps-scriptweb-applicationsoauthurlfetch

解决方案


我测试了您的代码,调用者脚本在以 WebApp 所有者或任何其他帐户执行时运行良好。它失败的唯一情况是在隐身模式下执行时(一些谷歌应用程序脚本函数在隐身模式下表现得很奇怪)。

尽量不要以隐身模式执行它,或者因为您没有使用getOAuthToken更改您的go()函数,如下所示

function go() {
  UrlFetchApp.fetch("https://script.google.com/a/AAAAA/macros/s/XXXXXXXXXXXXXXXX/exec");
} 

推荐阅读