首页 > 解决方案 > 在另一个项目文件中调用 Google Apps 脚本

问题描述

我正在尝试使用 UrlFetchApp.fetch在此处的示例之后调用另一个项目文件中的 Google Apps 脚本文件。
我遇到了与原始海报提到的相同的错误,但我的样本没有成功。
Google 在过去 4 年中是否更改了某些内容以阻止我调用其他脚本文件?
请参阅下面的脚本。

下面是我用来调用其他项目文件的函数

    function makeRequest() 
    {
      var webAppUrl = "https://script.google.com/macros/s/***/exec";

      var auth = ScriptApp.getOAuthToken();
      var header = { 'Authorization': 'Bearer ' +  auth };
      var options = { 'method':'post', 'headers':header };

      var resp = UrlFetchApp.fetch(webAppUrl, options);

      Logger.log(resp);
    }

下面是我试图调用的函数。此外,我已经运行了 authorizeDrive 函数并作为 webapp 发布。

    function authorizeDrive()
    {
      var forScope = DriveApp.getRootFolder();
    }

    function doPost()
    {  
      var ss = SpreadsheetApp.openById('ssID');
      var name = ss.getName();
      Logger.log('called');
      return ContentService.createTextOutput(name);
    }

标签: google-apps-script

解决方案


  • 您想通过从 GAS 项目 B 访问 Web 应用程序来运行 GAS 项目 A 中的 Google Apps 脚本。
  • 在您的情况下,Web 应用程序由Who has access to the app:ofOnly myself或部署Anyone
    • 您想使用访问令牌访问 Web 应用程序。
  • GAS 项目 A 和 B 在您的 Google Drive 中。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

我认为在您的情况下,需要将范围添加到项目中,包括makeRequest(). 那么为了增加使用访问令牌访问Web Apps的范围,下面的修改如何?

修改后的脚本:

function makeRequest() 
{
  var webAppUrl = "https://script.google.com/macros/s/***/exec";

  var auth = ScriptApp.getOAuthToken();
  var header = { 'Authorization': 'Bearer ' +  auth };
  var options = { 'method':'post', 'headers':header };

  var resp = UrlFetchApp.fetch(webAppUrl, options);

  Logger.log(resp);
}

// DriveApp.getFiles() // This comment line is used for automatically detecting the scope.
  • 请添加// DriveApp.getFiles()注释行的。此注释行用于自动检测范围。
  • 在这种情况下,https://www.googleapis.com/auth/drive.readonly被添加到范围。如果这不能解决您的问题,请添加// DriveApp.createFile(blob). 在这种情况下,https://www.googleapis.com/auth/drive添加。

笔记:

  • Web Apps端脚本修改后,请重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请注意这一点。
  • 如果 Web Apps 的 GAS 项目的所有者不是您的帐户,该帐户有脚本makeRequest(),请首先将 Web Apps 的 GAS 项目文件共享到您的帐户。那么,请测试一下。此规范已于 2018 年 4 月 11 日添加。另外,请注意这一点。

参考:

如果我误解了您的问题并且这不是您想要的结果,我深表歉意。


推荐阅读