脚本编辑器中的功能可以正常工作,但不能来自工作表自定义功能

Posted

技术标签:

【中文标题】脚本编辑器中的功能可以正常工作,但不能来自工作表自定义功能【英文标题】:Function from script editor works fine but not from sheets custom function 【发布时间】:2020-12-12 18:08:39 【问题描述】:

我写了一个添加全天事件的函数。

当函数从脚本编辑器运行正常时,全天事件被插入到日历中。

但是当我在活动电子表格=addevent(a1,b1,c1,d1)中运行函数时

我收到一条错误消息:

例外:脚本无权执行该操作。所需权限:(https://www.googleapis.com/auth/calendar || https://www.googleapis.com/auth/calendar.readonly || https://www.google.com/calendar/feeds)(第 11 行)

在网上搜索后,我发现如何通过编辑 JSON 文件中的 oauthScopes 手动添加这些权限:


  "oauthScopes": [
    "https://www.googleapis.com/auth/calendar",
    "https://www.googleapis.com/auth/calendar.readonly",
    "https://www.google.com/calendar/feeds",
    "https://www.googleapis.com/auth/spreadsheets.currentonly",
    "https://www.googleapis.com/auth/spreadsheets"
    
  ],
  
  "timeZone": "censored",
  "dependencies": 
    "enabledAdvancedServices": [
      "userSymbol": "Calendar",
      "serviceId": "calendar",
      "version": "v3"
    ]
  ,
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
  




但我仍然在电子表格中遇到同样的错误...

【问题讨论】:

【参考方案1】:

这是因为您不能使用自定义函数来执行需要授权的操作,例如将活动添加到您的日历。

来自official documentation:

与大多数其他类型的 Apps 脚本不同,自定义函数从不询问 用户授权访问个人数据。

但是,您可以尝试一些解决方法。例如,您可以在电子表格文件或时间驱动触发器中创建自定义菜单选项。

【讨论】:

【参考方案2】:

答案:

虽然无法直接从工作表中的单元格运行需要授权的脚本,但您可以将脚本设置为在单击按钮时运行。

更多信息和解决方法:

由于按钮没有与自定义函数相同的authorisation restrictions,因此您可以使用它们在所需范围内运行代码。要进行设置:

    转到Insert > Drawing菜单项并创建一个形状;任何形状都可以,这将充当您的按钮。 按Save and Close 将此添加到您的工作表中。 将新添加的绘图移动到您想要的位置。在图形的右上角,您将看到垂直省略号菜单 ()。点击这个,然后点击Assign script。 在新窗口中,输入您的函数名称,不带括号(例如myFunction),然后按OK

参考资料:

Custom Functions in Google Sheets | Apps Script | Google Developers

【讨论】:

以上是关于脚本编辑器中的功能可以正常工作,但不能来自工作表自定义功能的主要内容,如果未能解决你的问题,请参考以下文章

python import 以交互方式工作,但不是来自脚本

复杂的 cgi 脚本可以工作,但 test.cgi 不能

Textarea 可编辑,除了来自输入的值

粘性导航和滚动到顶部功能单独工作,但不能一起工作

Vue - 在引导表自定义组件上更新数据

使用Python子进程中的Vim编辑临时文件在Mac OS上无法正常工作