【问题标题】:Google Calendar Trigger Does Not Fire谷歌日历触发器不触发
【发布时间】:2020-08-22 17:38:18
【问题描述】:

目标是在编辑日历时将数据从 Google 日历传输到 Google 表格。为此,我们需要一个传输数据的脚本,并且需要设置日历触发器。

感谢 Oleg Valter 以及他对如何在此页面上创建脚本的出色而详尽的解释:

Google calendar events to Google spreadsheet automatic refresh onEdit

当脚本从 Google 表格启动时,数据传输已经正常工作。我使用了 Oleg 脚本的修改版本,效果很好,但我不确定在此处重新发布它是否有意义(因为这不是问题)。

我尝试先用 Oleg 的函数创建触发器:

/**
 * Installs Calendar trigger;
 */
function calendarTrigger() {
  var trigger = ScriptApp.newTrigger('callback name here')
  .forUserCalendar('calendar owners email here')
  .onEventUpdated()
  .create();
}

但是当我在日历上添加新事件时触发器没有触发。检查连接到项目的触发器,上面函数创建的触发器在那里。检查了执行,没有任何显示。

然后我手动删除了触发器,并按照本页“手动管理触发器”部分下的说明手动创建了一个新触发器:

https://developers.google.com/apps-script/guides/triggers/installable#google_apps_triggers

再次创建触发器,看起来和上面函数创建的触发器基本相同,但测试时仍然没有触发。

现在我被卡住了,不知道还能尝试什么。它应该可以工作,但我可能错过了设置其他可能需要它工作的东西。

我正在使用连接到单个电子邮件地址(不是商务套件)的简单 Google 帐户。之前我无法解决与工作表相关的其他触发器的任何问题(有时平台拒绝正常工作,但后来一切恢复正常)。

我非常感谢任何有关尝试其他方法的建议,或者如果您知道问题所在,那就更好了。

提前致谢,

佐尔坦

【问题讨论】:

  • 三个问题: 1. 您是您要访问的日历的所有者吗? 2.如何指定'calendar owners email here'?您是否将电子邮件设置为引号? 3.如何指定'callback name here'?它应该包含要在触发器上运行的函数的名称。
  • 1.是的,我是所有者,使用与电子表格相同的电子邮件添加器。 2.是的,使用"字符"myaddress@yahoo.com",3."updateSpreadsheet"这是传输数据的函数的名称,它工作正常。
  • 我刚刚添加了一个已安装的 onEdit 触发器来测试它是否工作(尽管项目不需要),它工作正常。但是日历触发器不会触发。

标签: google-apps-script google-sheets google-calendar-api


【解决方案1】:

好吧,经过基于 ziganotschka 的友好回答(再次感谢)的反复试验,发现了问题。这是由于对什么是有点混乱造成的

.forUserCalendar('日历所有者在此处发送电子邮件')

日历 ID 应该是。

在我的日历帐户中有几个日历,但我们在这里感兴趣的有两个:

  1. “主日历”,这是与帐户关联的默认日历。如果其他所有内容都被删除,那么这将保留。

  2. 我添加的另一个日历用于连接到电子表格,并将其命名为“自动计费”(仅选中并显示)。

主日历设置页面上有这个(更改了我的电子邮件地址):

集成日历

日历 ID

myAddress@yahoo.com

自动计费日历在 设置页面(更改了 ID):

集成日历

日历 ID

svj8tu1o458a9s1488xxxxxxxx@group.calendar.google.com

我的意图是为此目的使用自定义创建的日历,而不是使用默认的主日历,因为这可能会充满各种事件。

因此当手动创建触发器时

svj8tu1o458a9s1488xxxxxxxx@group.calendar.google.com

应在“日历所有者电子邮件”字段中添加,而不是日历所有者的电子邮件地址。

当使用上述sn-p从脚本创建触发器时,那么

.forUserCalendar("svj8tu1o458a9s1488xxxxxxxx@group.calendar.google.com")

应该使用。

在将数据从日历传输到工作表的脚本中

var Calendar = CalendarApp.getCalendarById("svj8tu1o458a9s1488xxxxxxxx@group.calendar.google.com");

应该使用。这样,当在 Auto Billing 日历上编辑事件时,触发器就会起作用。

感谢 Ziganotschka 的指导,也非常感谢 Oleg 的原创剧本。希望此调试对其他人也有帮助。

【讨论】:

    【解决方案2】:

    Google 日历触发器是 Google 日历的一项功能

    它不适用于“myaddress@yahoo.com”日历

    【讨论】:

    • 感谢 ziganotschka 的回答。你的意思是如果我使用 myaddress@gmail.com 而不是 yahoo.com 那么它会起作用吗?我假设它应该能够触发连接 Google 表格的 Apps 脚本功能,因为 Oleg 的原始脚本是基于此功能工作的。
    • 更新:我刚刚测试过,当它设置为“myaddress@yahoo.com”作为日历 ID(而不是 svj8tu1o458a9s1488xxxxxxxx@group.calendar.google.com)时,触发器确实会触发。但仅在编辑 Google 日历帐户的主日历时。当编辑同一帐户中的任何其他日历时,它不会触发。如果观看主日历,则 .forUserCalendar("myaddress@yahoo.com") 和 var Calendar = CalendarApp.getCalendarById("myaddress@yahoo.com");应该在脚本中使用。
    • 如果您的 Yahoo 帐户已链接到 Google 日历 - 那么是的,它确实有效。很抱歉造成误解 - 我以为您正在尝试从未链接到 Google 日历的 Yahoo 日历中获取事件。
    • 我可以使用我的 yahoo 电子邮件地址登录我的一个 Google 帐户,并使用我的 gmail 地址登录我的第二个 Google 帐户。我主要使用连接到我的雅虎电子邮件地址的那个,并且讨论的日历也在那个帐户中。您暗示问题可能出在电子邮件地址(或日历 ID)上,这使我弄清楚了它是如何工作的。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 2011-04-22
    • 2023-02-05
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多