我正在尝试使用Google Sheets API
。问题是,一旦我在google电子表格上调用了我的脚本函数,我就会得到以下错误:
对sheets.spreadsheets.values.get的API调用失败,错误:请求缺少一个有效的API键。(第5行)。
脚本中的line 5
如下所示:
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
在第一行中定义了spreadsheetId
和rangeName
。
我认为问题可能是我没有在任何地方复制API密钥,但我真的不知道我能在哪里以及如何做到这一点。
我只使用= function()
调用该函数。
发布于 2019-03-11 15:12:59
当您通过像=myFunction()
这样的自定义函数对单元格使用Sheets时,就会发生这样的错误。运行自定义函数时,ScriptApp.getOAuthToken()
返回null
。我认为这是你们问题的主要原因。不幸的是,我认为这是规范。为了避免这个问题,我想提出两个解决办法。
解决办法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,则需要访问令牌。但是它需要直接请求到Sheets的端点,因为访问令牌在的内部自动使用。本例中的一个问题是,当在自定义函数中运行ScriptApp.getOAuthToken()
时,将返回null
。为了避免这种情况,作为一种方法,使用PropertiesService直接将访问令牌赋予自定义函数。样本流如下所示。
onOpenFunc()
。
这样,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;
}
注意:
参考文献:
如果这些解决办法不是你想要的,我道歉。
发布于 2022-11-23 11:07:28
我想感谢你,@Tanaike,你的回复(我没有足够的“观点”来进行投票或评论,所以我唯一的选择是一个‘答案’)我知道这个帖子已经有好几年了,但我想其他人可能会对我的个人经历感兴趣。
首先:“解决方案1”为我工作!
函数/方法"Sheets.Spreadsheets.Values.get(spreadsheetID,RangeName).values“给了我一个”缺少有效API键“错误,所以我把它换成了"sheet.getRange(RangeName).getValues()".。上述大多数都被设置为全局变量,即任何函数之外的变量。
奇怪的是,此错误仅在从容器表中运行时发生,而不是从“嵌入式”脚本中运行。
例如:如果我有一个active onOpen()函数,并且打开/刷新了工作表,脚本将记录一个“请求缺少一个有效的API键”。错误,并且我在其中构建的UI/菜单不会加载。但是,我可以在脚本本身中运行onOpen()函数,菜单将出现在工作表中,函数也会出现。如果禁用/重命名onOpen()函数并重新加载工作表,则不会收到错误消息。这是有意义的,因为表的简单加载似乎没有运行脚本,但是当您访问它(脚本)(即通过onOpen()函数)时,就会读取初始的全局变量(并且会发生错误)。但是,当我从脚本本身运行相同的函数或其他函数时,它们会运行ok。这个权限难题使我在互联网上大惊小怪,最终落地于此。
所有这些都是在许多其他问题之后,在解决这个问题的过程中,我构建了一个,添加了API(例如,用于工作表),将作用域添加到清单的oauthScopes部分,等等。
只有在我做了上面描述的替换之后,所有的事情才开始工作,无论是从脚本还是它的容器电子表格!所以,,谢谢!
不管怎样..。很抱歉这么长时间,但我希望其他人能从你的解决方案中受益,在何种情况下,它对我有帮助。
干杯,-Paul
https://stackoverflow.com/questions/55100926
复制