0

我已经粘贴了下面的代码。为了解释代码的目的是封锁一个会议室,使其不能被保留使用,它是一个小的“会议室”,将被封锁,只能提前一周预订。

无论如何,这是我在下面的代码中遇到的问题。如果我从 1 月 1 日开始运行代码。代码将运行,然后在 3 月的中途停止创建事件,如果这恰好发生在月初,那将不是问题,因为我可以从那时开始轻松再次,或假设月份拼写错误。但它会在 3 月 18 日之前产生保留。此外,当我重新启动它并将其设置为从 4 月初开始创建阻止预订时,它一直持续到 12 月 8 日。

我的第一个猜测是我需要重新格式化代码以处理没有 31 天的月份,但我认为那些不存在的日子只会抛出一个错误,并且 lop 会继续,它确实度过了短暂的 2 月.

只是想也许对 Google Scripting 有更多经验的人可能有一个想法或看到我正在做的事情的缺陷。谢谢你的帮助

function blockReservations(){
  var roomcalendar = CalendarApp.getCalendarById('company.com_12458546525839392d898932@resource.calendar.google.com');
  //for(var z=2014;z<=2020;z++){
  //var year = z;  
  var year = '2014';  //This Line May be used in place of the above for loop to specify a specific year
  for(var x=4;x<=12;x++)
  {
    if(x==1) var month = 'January';
    else if(x==2) var month = 'February';
    else if(x==3) var month = 'March';
    else if(x==4) var month = 'April';
    else if(x==5) var month = 'May';
    else if(x==6) var month = 'June';
    else if(x==7) var month = 'July';
    else if(x==8) var month = 'August';
    else if(x==9) var month = 'September';
    else if(x==10) var month = 'October';
    else if(x==11) var month = 'November';
    else if(x==12) var month = 'December';
    else month = 'null';
    //var month = 'July';  //This Line May be used in place of the above for loop to specify a specific year

    for(var y=1;y<=31;y++)
    {
      var date = y;
      var startDateString = month + ' ' + date + ', ' + year +' 00:00:00';
      var endDateString = month + ' ' + date + ', ' + year +' 24:00:00';
      var event = roomcalendar.createEvent('Time Blocked', new Date(startDateString), new Date(endDateString));
    }
   }
// }
}
4

1 回答 1

0

您没有提及任何错误消息,但我希望您收到一封通知电子邮件,报告该脚本因运行时间过长而被终止。在循环中创建事件可能需要大量处理时间。

我提出了一种不同的方法。与其创建每日事件来预订房间,不如创建一个重复的全天事件,从未来几天开始。然后每天,可以更新此预订(通过定时触发功能)以修改重复规则以在一天后开始。

/**
 * Create or update a block reservation for a conference room,
 * starting 'blockFrom' days from today.
 */
function updateBlockReservation() {
  // Get Calendar
  var calName = 'Huddle Room';
  var cal = CalendarApp.getCalendarsByName(calName)[0];

  var title = 'Reserved';  // Reserved events will have this title
  var blockFrom = 7;       // Days from now until room is blocked
  var today = new Date();  // Today's date, ...
  today.setHours(0,0,0,0); // at midnight.
  var startDate            // Daily block reservation starts here
        = new Date(today.getTime() + (blockFrom * 24 * 60 * 60 * 1000));
  var endTime = new Date(startDate.getTime() + (24 * 60 * 60 * 1000) - 1);
  var recurrence = CalendarApp.newRecurrence().addDailyRule();

  // Look for existing block reservation
  var series = cal.getEvents(startDate, endTime, {search:title});

  if (series.length == 0) {
    // No block reservation found - create one.
    var reserved = cal.createAllDayEventSeries(title, startDate, recurrence);
  }
  else {
    // Block reservation exists - update the recurrence to start later.
    reserved = series[0].getEventSeries();
    reserved.setRecurrence(recurrence, startDate);
  }

  debugger;  // Pause if running in debugger
}
于 2013-11-21T18:11:54.763 回答