例外:您无权调用DriveApp.createFile 自定义功能不能用于调用访问个人数据的服务:参考:

问题描述

我创建了一个自定义脚本以从Google表格中运行,我需要创建一个文件。该脚本使用以下代码摘录:

  /*
Custom function to call IEXAPI IEXkeystatearningsdate 
@customfunction
*/

function IEXkeystatearningsdate(inputsymbol,stat,version) {

  if (version == "SandBox" || version == "sandBox")
    var url="https://sandBox.iexapis.com/stable/stock/"+inputsymbol+"/stats/"+stat+"?token=xyz";
  else
    var url="https://cloud.iexapis.com/stable/stock/"+inputsymbol+"/stats/"+stat+"?token=xyz";
  
  var response=UrlFetchApp.fetch(url);  //Call REST API
  var json=response.getContentText();   
  var data = JSON.parse(json);          //Parse into JSON object
  var d = new Date();
  var n = d.toLocaleString();
  var fn = "IEXkeystatearningsdate_" + n;
  DriveApp.createFile(fn,inputsymbol,MimeType.CSV);
  return (data);
}

但是,我收到此消息:

“例外:您无权调用DriveApp.createFile。所需权限:https://www.googleapis.com/auth/drive(第20行)”

当我直接从脚本编辑器运行此脚本时,我收到此消息。

这是我的清单文件

{

"oauthScopes": [
    "https://www.googleapis.com/auth/drive"
  ],"timeZone": "America/Los_Angeles","dependencies": {
  },"exceptionLogging": "STACKDRIVER","runtimeVersion": "V8"
}

我不使用G-Suite。我仅将google /表格用于个人用途。 OAuth常见问题解答表示应允许个人使用此调用。有人可以帮我解决这个问题吗?

解决方法

从错误描述中,我可以假定您正在简单的onEdit触发器上运行脚本。

简单的onEdit触发器无法访问需要授权的服务。

请参见restrictions

对您来说,这意味着您可以在简单的触发条件下执行DriveApp

解决方案:

改为使用Installable trigger

要这样做:

  • 将功能onEdit()重命名为非关键字
  • 继续Edit -> Current project's triggers
  • 点击+创建一个新触发器
  • 指定要运行的功能
  • Select event type设置为On edit
,

自定义功能不能用于调用访问个人数据的服务:

与大多数其他类型的Apps脚本不同,自定义功能从不要求用户授权访问个人数据。因此,他们只能呼叫无法访问个人数据的服务

当然,其中包括DriveApp。而且它还包含getOAuthToken()之类的东西(通过自定义函数调用时为returns null),因此直接通过UrlFetch调用Drive API也不起作用。

您应该按照ziganotschka的建议安装onEdit触发器,或者通过custom menu而不是自定义函数来调用此函数,以便在尝试时被要求授权运行它。

参考: