如何在电子表格中的日历谷歌中获得执行操作的权限

Posted

技术标签:

【中文标题】如何在电子表格中的日历谷歌中获得执行操作的权限【英文标题】:How to get permission to perform action in calendar google in spreadsheet 【发布时间】:2019-12-29 19:43:34 【问题描述】:

我在 Google 表格的脚本编辑器中编写了一个代码,以在 Google 日历中创建事件并将事件发送到另一个邮件,当我在脚本编辑器中进行调试时,脚本可以工作,但是当我在电子表格中调用该函数时,我得到一个错误。

脚本:

function eventSheet()

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  var tab = spreadsheet.getSheetByName("150919");

  var tituloEvento = "Webinar test";
  //var guest = tab.getRange(4, 7).getValue();
  var guest="mizrahijulio@gmail.com";
  var startTime = tab.getRange(2,22).getValue();

  startTime=new Date(startTime);
  var endTime = tab.getRange(2,23).getValue();
  endTime=new Date(endTime);
  Logger.log(startTime+"\n"+endTime)

  var descripcion= "Webinar test";

  var calendar = CalendarApp.getDefaultCalendar();

  var evento = calendar.createEvent(tituloEvento, startTime, endTime, 
    description:descripcion,
    guests:guest,
    sendInvites:true   

  );


我的范围:

     "oauthScopes": [
    "https://www.googleapis.com/auth/spreadsheets.readonly",
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/script.container.ui",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/calendar ",
    "https://www.googleapis.com/auth/calendar.readonly ",
    "https://www.google.com/calendar/feeds"   
  ]

电子表格中的错误:

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

【问题讨论】:

你是如何运行你的脚本的?触发器执行不允许使用其他 API。 @AMolina 我只是在电子表格中调用该函数。所以我无法从电子表格访问谷歌日历? 我明白了,但是您是否通过按钮、作为附加组件、作为单元格中的函数、通过触发器来调用它?您很可能需要将其作为网络应用程序才能使用日历 【参考方案1】:

我发现发送电子邮件的函数不允许从电子表格中触发,即使它们在脚本编辑器中调用时可以完美运行。这可能是因为每次打开电子表格时函数都会运行(并评估所有函数),从而导致发送大量电子邮件而用户甚至都不知道。

上面的脚本会导致发送一封电子邮件(包含活动邀请),这在从电子表格调用的函数中可能是不允许的。我还怀疑电子表格中不允许创建日历事件,但尚未对此进行测试。

处理此问题的一种方法是改为从菜单项调用该函数。我在这里的一个小项目中有一个类似功能的示例:https://github.com/Itangalo/kursplaneringGo/blob/main/Code.gs。代码和cmets是英文的,但是项目描述是瑞典文的。

【讨论】:

以上是关于如何在电子表格中的日历谷歌中获得执行操作的权限的主要内容,如果未能解决你的问题,请参考以下文章

无法从谷歌电子表格中读取

如何获取谷歌电子表格的共享链接?

如何在处理表单之前检查谷歌电子表格?

谷歌电子表格脚本 - 保护工作表的权限

如何链接谷歌电子表格中的两个单元格是否可能?

如何删除 PHPMailer 发送的电子邮件中的“通过”