【问题标题】:Google Apps Script - call function deployed as API executableGoogle Apps 脚本 - 部署为 API 可执行文件的调用函数
【发布时间】:2022-12-18 20:19:59
【问题描述】:

我创建了一个附加到谷歌表格的谷歌应用程序脚本(我有各种方法来处理电子表格),并且我已经将它部署为 API 可执行文件(启用 OAuth 等)。目标是从不属于 Google 云的外部位置通过 REST 调用这些方法(例如独立的 React 客户端、独立服务器或我的本地计算机)

问题是:我如何从独立的 javascript 调用它(比如在我的本地机器上执行的 node.js 脚本?我有脚本 URL(脚本 ID)、秘密和密钥,但不知道如何使用商场。 你能帮忙提供一些示例代码、指针等吗?看起来我的谷歌搜索只命中了不相关的主题……

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    您可以查看此example,了解如何将脚本作为 API 可执行文件调用。您会看到从不同语言调用脚本的方式相似,例如使用JavaScript,您还需要注意一些重要信息,例如:

    Apps 脚本中的基本类型类似于 JavaScript 中的基本类型:字符串、数组、对象、数字和布尔值。 Execution API 只能获取和返回与这些基本类型相对应的值——API 无法传递更复杂的 Apps Script 对象(如 Document 或 Sheet)。

    使用 Apps 脚本以您当前想要的方式进行调用的示例如下:

    Target Script

    /** This is the Apps Script method these API examples will be calling.
     *
     *  It requires the following scope list, which must be used when authorizing
     *  the API:
     *    https://www.googleapis.com/auth/spreadsheets
     */
    
    /**
     * Return a list of sheet names in the Spreadsheet with the given ID.
     * @param {String} a Spreadsheet ID.
     * @return {Array} A list of sheet names.
     */
    function getSheetNames(sheetId) {
      var ss = SpreadsheetApp.openById(sheetId);
      var sheets = ss.getSheets();
      return sheets.map(function(sheet) {
        return sheet.getName();
      });
    }
    

    这是您设置为 API 可执行文件的脚本,您可以使用 JavaScript 调用此脚本,如下所示:

    // ID of the script to call. Acquire this from the Apps Script editor,
    // under Publish > Deploy as API executable.
    var scriptId = "<ENTER_YOUR_SCRIPT_ID_HERE>";
    
    // Initialize parameters for function call.
    var sheetId = "<ENTER_ID_OF_SPREADSHEET_TO_EXAMINE_HERE>";
    
    // Create execution request.
    var request = {
        'function': 'getSheetNames',
        'parameters': [sheetId],
        'devMode': true   // Optional.
    };
    
    // Make the request.
    var op = gapi.client.request({
        'root': 'https://script.googleapis.com',
        'path': 'v1/scripts/' + scriptId + ':run',
        'method': 'POST',
        'body': request
    });
    
    // Log the results of the request.
    op.execute(function(resp) {
      if (resp.error && resp.error.status) {
        // The API encountered a problem before the script started executing.
        console.log('Error calling API: ' + JSON.stringify(resp, null, 2));
      } else if (resp.error) {
        // The API executed, but the script returned an error.
        var error = resp.error.details[0];
        console.log('Script error! Message: ' + error.errorMessage);
      } else {
        // Here, the function returns an array of strings.
        var sheetNames = resp.response.result;
        console.log('Sheet names in spreadsheet:');
        sheetNames.forEach(function(name){
          console.log(name);
        });
      }
    });
    

    另请注意,在进一步执行测试之前,您可能需要检查一些 limitations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-03
      • 2020-11-25
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多