使用代码创建一个空白的电子表格并获取它的Id。一旦资源的Id可用,我想以编程方式将自定义脚本附加到它。
[...]
var newSpreadsheet = SpreadsheetApp.create("Опис "+dateFormated);
Logger.log(newSpreadsheet.getId());
var url = 'https://script.googleapis.com/v1/projects/'+newSpreadsheet.getId();
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url, {
headers: {
Authorization: 'Bearer ' + token
},
muteHttpExceptions: true
});
该请求会导致一个错误(无论我为项目调用哪个端点(错误消息中提供的URL没有帮助,因为它不是我管理的项目。去它会导致
您没有足够的权限查看此页面
您至少缺少以下一个必需权限:
项目
resourcemanager.projects.get
serviceusage.services.get
"error": {
"code": 403,
"message": "Apps Script API has not been used in project 85798724816 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/script.googleapis.com/overview?project=85798724816 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
"status": "PERMISSION_DENIED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.Help",
"links": [
{
"description": "Google developers console API activation",
"url": "https://console.developers.google.com/apis/api/script.googleapis.com/overview?project=85798724816"
}
]
}
]
}
编辑:海雀和大师的答案都解决了这个问题。
TheMaster的答案是我想做什么,更具体地说
我的问题还有一个问题。我正试图在创建一个电子表格之前就为它获取项目。因此,正确的第一个请求是";POST";至";https://script.googleapis.com/v1/projects">
解决步骤:
- 从";默认";谷歌云项目;标准";云项目(查看TheMaster的链接(
- 在云控制台中为项目创建API密钥
var url = 'https://script.googleapis.com/v1/projects?key=[YOUR_KEY_HERE]';
var token = ScriptApp.getOAuthToken();
var data = {
"parentId": "16eL4PIVFO5Zdd7r-8HhQF_4OZS7G7TbTX-pg",
"title": "autoProject"
};
var response = UrlFetchApp.fetch(url, {
headers: {
Authorization: 'Bearer ' + token
},
method: 'POST',
contentType: "application/json",
muteHttpExceptions: true,
payload: JSON.stringify(data),
});
这就是您从脚本本身向脚本API执行成功请求的方式
-
如果这是gsuite,您可能需要要求管理员授予这些权限。
-
如果你确定你有特权,你需要从";默认";谷歌云项目;标准";云项目
-
为创建的";标准";GCP
-
需要将项目范围添加到清单
-
相关答案和评论链
首先,要获得电子表格的url,只需调用getUrl
方法,该方法将完整的url作为字符串返回到电子表格:
var ss = SpreadsheetApp.getActiveSpreadsheet();
Logger.log(ss.getUrl());
一旦这样做,您就有了使用SriptApp
服务的正确想法,但在运行时附加脚本的细节是错误的。要将函数附加到工作表,您需要使用TriggerBuilder
:创建一个新的Trigger
(仅在给定条件下调用的回调有效(
ScriptApp.newTrigger('myFunction')
.forSpreadsheet(ss) // you can also use the spreadsheet id here
.onOpen()
.create();
需要注意的是,您希望以字符串而不是回调的形式传入所需的函数名。
要做到这一点,您将需要https://www.googleapis.com/auth/script.scriptapp
授权范围,否则您将收到更多的运行时错误,您可以在谷歌脚本项目面板中查看这些错误。
有关更多信息,请阅读谷歌服务的授权范围和授权