错误:“您在短时间内创建或删除了太多日历或日历活动。” [英] Error: "You have been creating or deleting too many calendars or calendar events in a short time."

查看:91
本文介绍了错误:“您在短时间内创建或删除了太多日历或日历活动。”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

第一次在这里问一个问题。



我已经构建了一个Google应用脚本,可以从Google表格中获取事件信息,并根据 @Mogsdad的答案在这里。 (由于我不存在声望,我无法在该线程上发布问题)



exportEvents函数首次运行得非常漂亮。但是一旦电子表格中包含更多行信息,它就没有完成脚本,而是说您在短时间内创建或删除了太多日历或日历活动,请稍后再试。

这不是由于Google设置的每日配额,因为我没有每天创建接近10,000个事件的任何配额。我搜索了一个解决方案,并在Google产品论坛上找到 @ JEvans-GSA,他的脚本是以@Mogsdad的脚本为基础的。



我调整了他的解决方案,并将updateEvents功能与exportEvents创建deleteEvents函数)。现在,exportEvents不会遇到您在短时间内创建或删除了太多日历或日历事件,请稍后再试问题。 但是updateEvents仍然会得到相同的警告,执行一半! 标题为1到83的83个事件并成功导出
事件到日历。

  • 然后我将事件标题更改为100到182更新事件。

  • 它只更新了1〜15至101〜114,其余部分保持不变。 - 我让函数更新状态列为更新(今天的
    日期),它也没有执行。



  • 所以函数开始但没有完成,这让我认为错误必须在设置重现的某个地方。是否有解决方法使updateEvents工作,或者作为 @ Mogsdad在原始答案中建议,是删除和重新创建活动的唯一方法?



    预先感谢您的帮助。以下是我的电子表格的链接(由于我的代表数低,我不允许使用超过2个链接): - https://docs.google.com/spreadsheets/d/1V6eioCo4QDPO2DdCyW93sLRWT_xtzKM-drDPVI1Gd8s/edit?usp=sharing



    以及我目前的脚本:

    pre $全局设置
    var calId = calendar.google.com;
    var moderatorEmail ='EMAIL_ADDRESS';

    var idId = 0;
    var startTimeId = 1;
    var endTimeId = 2;
    var titleId = 3;
    var organizerId = 4;
    var locId = 5;
    var descId = 6;
    var urlId = 7;
    var topicId = 8;
    var typeId = 9;
    var contactId = 10;
    var contactEmailId = 11;
    var actionId = 12;
    var statusId = 13;

    //添加一个自定义菜单
    函数onOpen(){
    var ss = SpreadsheetApp.getActive();
    var items = [
    {name:'Export Events',functionName:'exportEvents'},
    {name:'Update Events',functionName:'updateEvents'},
    {name:'Delete Events',functionName:'deleteEvents'}
    ];
    ss.addMenu('Calendar',items);


    //实际函数
    函数exportEvents(){
    var spreadsheet = SpreadsheetApp.getActiveSheet();
    var headerRows = 2; //标题信息的行数跳过
    var range = spreadsheet.getDataRange();
    var data = range.getValues();
    var cal = CalendarApp.getCalendarById(calId);
    for(i in data){
    if(i var row = data [i];
    var title = row [titleId];
    var tstart = new Date(row [startTimeId]);
    tstart.setDate(tstart.getDate());
    tstart.setMonth(tstart.getMonth());
    tstart.setYear(tstart.getYear());
    tstart.setTime(tstart.getTime());
    var tstop = new Date(row [endTimeId]);
    tstop.setDate(tstop.getDate());
    tstop.setMonth(tstop.getMonth());
    tstop.setYear(tstop.getYear());
    tstop.setTime(tstart.getTime());
    var loc = row [locId];
    var contact = row [contactId];
    var organizer = row [organizerId];
    var topic = row [topicId];
    var type = row [typeId];
    var contactEmail = row [contactEmailId];
    var url = row [urlId];
    var status = row [statusId];
    var desc =(row [descId]
    +\\\
    \\\
    -Organizer:+ organizer
    +\ n-Event URL:+ url
    +\ n-Event Type:+ type
    +\\\
    -Event Contact:+ contact +(+ contactEmail +))
    var id = row [idId];
    //检查事件是否已经存在,如果有的话更新它
    try {
    var event = cal.getEventSeriesById(id);
    }
    catch(e){
    //什么也不做 - 当事件不存在时,我们只想避免异常
    }

    if (!event){
    //cal.createEvent(title,new Date(Month D,YYYY 00:00:00)),new Date(Month D,YYYY 00:00:00),{description :desc,location:loc});
    var newEvent = cal.createEvent(title,tstart,tstop,{description:desc,location:loc}).getId(); $ b $ row [idId] = newEvent; //用事件ID更新数据数组

    var d = new Date();
    var time = d.getMonth()+ 1 +/+ d.getDate )+/+ d.getFullYear()
    row [statusId] =导出+时间
    }
    调试器;
    }
    range.setValues(data );
    }

    function updateEvents(){
    var sheet = SpreadsheetApp.getActiveSheet();
    var headerRows = 2; //跳过的行数
    var range = sheet.getDataRange();
    var data = range.getValues();
    var cal = CalendarApp.getCalendarById(calId);
    for(i in data){
    if(i < headerRows)继续;
    var row = data [i];
    var title = row [titleId]; //第二列
    var tstart = new Date(row [startTimeId]);
    tstart.setDate(tstart.getDate());
    tstart.setMonth(tstart.getMonth());
    tstart.setYear(tstart.getYear());
    tstart.setTime(tstart.getTime());
    var tstop = new Date(row [endTimeId]);
    tstop.setDate(tstop.getDate());
    tstop.setMonth(tstop.getMonth());
    tstop.setYear(tstop.getYear());
    tstop.setTime(tstart.getTime());
    var loc = row [locId];
    var contact = row [contactId];
    var organizer = row [organizerId];
    var topic = row [topicId];
    var type = row [typeId];
    var contactEmail = row [contactEmailId];
    var url = row [urlId];
    var action = row [actionId];
    var status = row [statusId];
    var desc =(row [descId]
    +\\\
    \\\
    -Organizer:+ organizer
    +\ n-Event URL:+ url
    +\\\
    -Type:+ type
    +\\\
    -Event Contact:+ contact +(+ contactEmail +))
    var id = row [idId];
    尝试{
    var event = cal.getEventSeriesById(id);
    }
    catch(e){
    // do nothing
    }
    if(event){
    if(action ===Update) {
    event.setTitle(title);
    event.setDescription(desc);
    event.setLocation(loc);
    // eventSetTime(tstart,tstop); //无法在eventSeries上设置时间。
    // ...但我们可以设置重复!
    var recurrence = CalendarApp.newRecurrence()。addDailyRule()。times(1);
    event.setRecurrence(recurrence,tstart,tstop);

    var d = new Date();
    var time = d.getMonth()+ 1 +/+ d.getDate()+/+ d.getFullYear()
    row [statusId] =Updated+ time
    }
    }
    }
    调试器;
    range.setValues(data);



    function deleteEvents(){
    var sheet = SpreadsheetApp.getActiveSheet();
    var headerRows = 2; //跳过的行数
    var range = sheet.getDataRange();
    var data = range.getValues();
    var cal = CalendarApp.getCalendarById(calId);
    for(i in data){
    if(i var row = data [i];
    var action = row [actionId];
    var status = row [statusId];
    var id = row [idId];
    尝试{
    var event = cal.getEventSeriesById(id);

    catch(e){
    }
    if(event){
    if(action ===Delete){
    event.deleteEventSeries ();

    var d = new Date();
    var time = d.getMonth()+ 1 +/+ d.getDate()+/+ d.getFullYear()
    row [idId] =已删除;
    row [statusId] =已删除+时间;
    }
    }
    }
    调试器;
    range.setValues(data);
    }


    解决方案

    并在谷歌搜索让我在这里,所以我会离开我的解决方案。在我的情况中,我添加了电子邮件提醒事件,导致您在短时间内创建或删除了太多日历或日历事件,请稍后再试。创建仅10个事件后发生错误。删除对 Event.addEmailReminder()的调用修复了我的问题。


    first time asking a question here.

    I've built a Google App Script that takes event info from Google Sheets and creates events on Google Calendar, based on @Mogsdad's answer here. (I couldn't post a question on that thread because of my nonexistent reputation)

    The "exportEvents" function worked beautifully the first time. But once the spreadsheet had more rows of information, it didn't finish the script and instead said "You have been creating or deleting too many calendars or calendar events in a short time. Please try again later."

    This is not due to the daily quota that Google set because I'm not creating anything close to 10,000 events a day. I searched for a solution, and found this on Google Product Forum by @JEvans-GSA, who is basing his script on @Mogsdad's script like me.

    I adapted his solution and separated the "updateEvents" function from "exportEvents" (and also created "deleteEvents" function). Now the "exportEvents" do not run into the "You have been creating or deleting too many calendars or calendar events in a short time. Please try again later" problem. But the "updateEvents" still get the same warning, half way through execution!

    • For example, I created 83 events titled "1" to "83" and exported the events to calendar successfully.
    • Then I changed the event titles to "100" to "182" and tried to update the events.
    • It only updated "1"~"15" to "101"~"114", and everything else remained the same. - I made the function update the "status" column as "Updated (today's date)", which also didn't execute.

    So the function started but didn't finish, which makes me think that the error must be somewhere in setting the recurrence. Is there a workaround to make "updateEvents" work, or as @Mogsdad suggested in the original answer, is the only other way to delete and recreate events?

    Thank you in advance for any help. Here are links to my spreadsheet (I'm not allowed to use more than 2 links, due to my low rep): - https://docs.google.com/spreadsheets/d/1V6eioCo4QDPO2DdCyW93sLRWT_xtzKM-drDPVI1Gd8s/edit?usp=sharing

    And my current script:

    //Global settings
    var calId = 'n02m72vanqabnt1gcjluk2vosk@group.calendar.google.com';
    var moderatorEmail = 'EMAIL_ADDRESS';
    
    var idId = 0;
    var startTimeId = 1;
    var endTimeId = 2;
    var titleId = 3;
    var organizerId = 4;
    var locId = 5;
    var descId = 6;
    var urlId = 7;
    var topicId = 8;
    var typeId = 9;
    var contactId = 10;
    var contactEmailId = 11;
    var actionId = 12;
    var statusId = 13;
    
    //Add a custom menu
    function onOpen() {
      var ss = SpreadsheetApp.getActive();
      var items = [
        {name: 'Export Events', functionName: 'exportEvents'},
        {name: 'Update Events', functionName: 'updateEvents'},
        {name: 'Delete Events', functionName: 'deleteEvents'}
      ];
      ss.addMenu('Calendar', items);
    }
    
    //Actual functions
    function exportEvents() {
      var spreadsheet = SpreadsheetApp.getActiveSheet();
      var headerRows = 2; //Number of rows of header info to skip
      var range = spreadsheet.getDataRange();
      var data = range.getValues();
      var cal = CalendarApp.getCalendarById(calId);
      for (i in data) {
        if (i < headerRows) continue; //Skip header rows
        var row = data[i];
        var title = row[titleId];
        var tstart = new Date(row[startTimeId]);
          tstart.setDate(tstart.getDate());
          tstart.setMonth(tstart.getMonth());
          tstart.setYear(tstart.getYear());
          tstart.setTime(tstart.getTime());
        var tstop = new Date(row[endTimeId]);
          tstop.setDate(tstop.getDate());
          tstop.setMonth(tstop.getMonth());
          tstop.setYear(tstop.getYear());
          tstop.setTime(tstart.getTime());
        var loc = row[locId];
        var contact = row[contactId];
        var organizer = row[organizerId];
        var topic = row[topicId];
        var type = row[typeId];
        var contactEmail = row[contactEmailId];
        var url = row[urlId];
        var status = row[statusId];
        var desc = (row[descId]
            +"\n\n-Organizer: "+organizer
            +"\n-Event URL: "+url
            +"\n-Event Type: "+type
            +"\n-Event Contact: "+contact+" ("+contactEmail+")")
        var id = row[idId];
        // Check if the event already exists, update it if it does
        try {
          var event = cal.getEventSeriesById(id);
        }
        catch (e) {
        // Do nothing - we just want to avoid the exception when event doesn't exist
        }
    
        if (!event) {
          //cal.createEvent(title, new Date("Month D, YYYY 00:00:00"), new Date("Month D, YYYY 00:00:00), {description:desc,location:loc});
          var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}).getId();
          row[idId] = newEvent; // Update the data array with event ID 
    
          var d = new Date();
          var time = d.getMonth()+1 + "/" + d.getDate() + "/" + d.getFullYear()
          row[statusId] = "Exported " + time
          }
        debugger;
      }
      range.setValues(data);
    }
    
    function updateEvents() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var headerRows = 2; //Number of rows to skip
      var range = sheet.getDataRange();
      var data = range.getValues();
      var cal = CalendarApp.getCalendarById(calId);
      for (i in data) {
        if (i < headerRows) continue;
        var row = data[i];
        var title = row[titleId]; //Second column
        var tstart = new Date(row[startTimeId]);
          tstart.setDate(tstart.getDate());
          tstart.setMonth(tstart.getMonth());
          tstart.setYear(tstart.getYear());
          tstart.setTime(tstart.getTime());
        var tstop = new Date(row[endTimeId]);
          tstop.setDate(tstop.getDate());
          tstop.setMonth(tstop.getMonth());
          tstop.setYear(tstop.getYear());
          tstop.setTime(tstart.getTime());
        var loc = row[locId];
        var contact = row[contactId];
        var organizer = row[organizerId];
        var topic = row[topicId];
        var type = row[typeId];
        var contactEmail = row[contactEmailId];
        var url = row[urlId];
        var action = row[actionId];
        var status = row[statusId];
        var desc = (row[descId]
            +"\n\n-Organizer: "+organizer
            +"\n-Event URL: "+url
            +"\n-Type: "+type
            +"\n-Event Contact: "+contact+" ("+contactEmail+")")
        var id = row[idId];
        try {
          var event = cal.getEventSeriesById(id);
        }
        catch (e) {
          // do nothing
        }
        if (event) {
          if (action === "Update") {
            event.setTitle(title);
            event.setDescription(desc);
            event.setLocation(loc);
          // eventSetTime(tstart, tstop); // cannot setTime on eventSeries.
          // ... but we Can set recurrence!
            var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
            event.setRecurrence(recurrence, tstart, tstop);
    
            var d = new Date();
            var time = d.getMonth()+1 + "/" + d.getDate() + "/" + d.getFullYear()
            row[statusId] = "Updated " + time
          }
        }
      }
      debugger;
      range.setValues(data);
    }
    
    
    function deleteEvents() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var headerRows = 2; //Number of rows to skip
      var range = sheet.getDataRange();
      var data = range.getValues();
      var cal = CalendarApp.getCalendarById(calId);
      for (i in data) {
        if (i < headerRows) continue;
        var row = data[i];
        var action = row[actionId];
        var status = row[statusId];
        var id = row[idId];
        try {
          var event = cal.getEventSeriesById(id);
        }
        catch (e) {
        }
        if (event) {
          if (action === "Delete") {
            event.deleteEventSeries();
    
            var d = new Date();
            var time = d.getMonth()+1 + "/" + d.getDate() + "/" + d.getFullYear()
            row[idId] = "Deleted";
            row[statusId] = "Deleted " + time;
          }
        }
      }
      debugger;
      range.setValues(data);
    }
    

    解决方案

    I had the same error, and searching on Google let me here, so I'll leave my solution. In my case, I was added email reminders to events, which caused the "You have been creating or deleting too many calendars or calendar events in a short time. Please try again later." error after created only 10s of events. Removing the call to Event.addEmailReminder() fixed my problem.

    这篇关于错误:“您在短时间内创建或删除了太多日历或日历活动。”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆