gpt4 book ai didi

google-apps-script - 谷歌表格, "The request is missing a valid API key"

转载 作者:行者123 更新时间:2023-12-03 09:28:39 26 4
gpt4 key购买 nike

我正在尝试使用 Google Sheets API .问题是,一旦我在谷歌电子表格上调用我的脚本函数,我就会收到以下错误:

API call to sheets.spreadsheets.values.get failed with error: The request is missing a valid API key. (line 5).


哪里 line 5在脚本中看起来像这样:
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
spreadsheetIdrangeName在第一行中定义。
我认为问题可能是我没有在任何地方复制 API key ,但我真的不明白在哪里以及如何做到这一点。
我只使用 = function() 调用该函数.

最佳答案

当您通过自定义函数(如 =myFunction())使用 Sheets API 时放到一个单元格中,就会发生这样的错误。运行自定义函数时,ScriptApp.getOAuthToken()返回 null .我认为这是您出现问题的主要原因。不幸的是,我认为这就是规范。为了避免这个问题,我想提出 2 个解决方法。

解决方法 1:

电子表格服务的一部分可以在自定义函数中使用。因此,使用它,它与 var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values; 获得相同的结果.对于您的脚本,openById()不能使用。所以脚本如下。

示例脚本:

function customFunc() {
var rangeName = "#####"; // Please set this.

var sheet = SpreadsheetApp.getActiveSpreadsheet();
var values = sheet.getRange(rangeName).getValues();
return values;
}

解决方法 2:

如果要使用 Sheets API,则需要访问 token 。但是需要直接请求到Sheets API的端点,因为在Advanced Google Services内部会自动使用访问 token 。作为本案的一个问题,当 ScriptApp.getOAuthToken()在自定义函数中运行, null被退回。为了避免这种情况,作为一种方法,使用 PropertiesService 将访问 token 直接提供给自定义函数。示例流程如下。
  • 当电子表格打开时,它通过 OnOpen 触发器将访问 token 放入 PropertiesService。
  • 使用时请安装OnOpen触发器到onOpenFunc()在示例脚本中。
  • 运行自定义函数时,PropertiesService 检索到的访问 token 用于使用 Sheets API。

  • 这样,可以在自定义函数中使用 Sheets API。

    示例脚本:
    // Please install OnOpen trigger to this function.
    function onOpenFunc() {
    PropertiesService.getScriptProperties().setProperty("accessToken", ScriptApp.getOAuthToken());
    }

    function customFunc() {
    var spreadsheetId = "#####"; // Please set this.
    var rangeName = "#####"; // Please set this.

    var accessToken = PropertiesService.getScriptProperties().getProperty("accessToken");
    var url = "https://sheets.googleapis.com/v4/spreadsheets/" + spreadsheetId + "/values/" + rangeName;
    var res = UrlFetchApp.fetch(url, {headers: {"Authorization": "Bearer " + accessToken}});
    var obj = JSON.parse(res.getContentText());
    var values = obj.values;
    return values;
    }
  • access token 的过期时间为 1 小时。在此示例脚本中,使用了 PropertiesService。在这种情况下,如果在打开电子表格后花费 1 小时,则无法使用访问 token 。如果您想连续使用访问 token ,您还可以使用时间驱动触发器更新它。

  • 笔记:
  • 使用 Sheets API 时,请在 API 控制台启用 Sheets API。

  • 引用:
  • Custom Functions in Google Sheets
  • spreadsheets.values.get
  • PropertiesService

  • 如果这些解决方法不是您想要的,我深表歉意。

    关于google-apps-script - 谷歌表格, "The request is missing a valid API key",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55100926/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com