首页 > 解决方案 > Google Apps 脚本根据条件发送不同的电子邮件,日期的日历事件列表

问题描述

使用下面的脚本,我试图根据不同的条件发送不同的电子邮件。该表格正在处理会议请求。其中一封电子邮件包括正文部分,其中列出了当天的日历事件。

它很快就崩溃了:“ TypeError: Cannot read property 'list' of undefined ” 在该var events = CalendarApp.Events.list(calId, {行中。

我明白为什么会出现错误,因为list没有定义。但是,它是Advanced Calendar Services的示例代码之一,所以我的印象是它可以正常工作。

function draftSendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Form Responses 1");
  var Avals = ss.getRange("A1:A").getValues();            //Status request (pending, etc).
  var lastRow = Avals.filter(String).length;
  Logger.log(lastRow);
   
  for (var i = 2; i <= lastRow ; i++) {
    var approvalStatus = sheet.getRange(i,1).getValue();
    var name = sheet.getRange(i,8).getValue();            
    var description = sheet.getRange(i,9).getValue();     //Description.
    var date = sheet.getRange(i,5).getValue();            //Date.
      var formattedStart = Utilities.formatDate(new Date(date), 'Europe/London', 'Mmmm dd, yyyy');
    var startTime = sheet.getRange(i,6).getValue();       //Event starting time.
      var formattedSTime = Utilities.formatDate(new Date(startTime), 'Europe/London','hh:mm');
    var endTime = sheet.getRange(i,7).getValue();         //Estimated end time of event.
      var formattedETime = Utilities.formatDate(new Date(endTime), 'Europe/London','hh:mm');
    var guests = sheet.getRange(i,15,1,10).getValues();   //Event guests by email address.
    var staffMember = sheet.getRange(i,10).getValue();    //Meeting with whom, determines Calendar ID (CalId).
    var staffEmail = sheet.getRange(i,13).getValue();     //Email address staff member.
    var calId = sheet.getRange(i,11).getValue();          //Calendar the meeting goes into.
    var booker = sheet.getRange (i,3).getValue();         //The person booking the meeting.
    var booEmail = sheet.getRange(i,4).getValue();        //Email booker.
    var eventStatus = sheet.getRange(1,1,i,12).getCell(i,12);
    var bookNotifyBoo = sheet.getRange(i,14).getValue();  //Booker emailed with confirmation?

    //List of calId's events on date.
    var events = Calendar.Events.list(calId, {
      timeMin: date,
      singleEvents: true,
      orderBy: 'startTime',
      maxResults: 50
    });
    if (events.items && events.items.length > 0) {
      for (var o = 0; o < events.items.length; o++) {
        var event = events.items[o];
        if (event.start.date) {
          // All-day event.
          var start = new Date(event.start.date);
          Logger.log('%s (%s)', event.summary, start.toLocaleDateString());
        } else {
          var start = new Date(event.start.dateTime);
          Logger.log('%s (%s)', event.summary, start.toLocaleString());
        }
      }
    } else {
      Logger.log('No events found.');
    }

    if (approvalStatus == "Approved" && bookNotifyVol.isBlank()){
      MailApp.sendEmail(booEmail,
        name + " meeting is booked for " + formattedStart + " " + formattedSTime + " - " + formattedETime,
        "Hello " + booker + "," + "\n" + "\n" + "Your request for a " + name + " meeting has been approved by " + staffMember + ". Any other attendees will also be notified." + "\n" + "\n" + "The agenda for this meeting has been recorded as following:" + "\n" + description + "\n" + "\n" + "Wishing you a wonderful day." + "\n" + "\n" + "Kind regards," + "\n" + staffMember,{cc: guests});
      sheet.getRange(bookNotifyBoo).setValue("Notified");
    }
    if (approvalStatus == "Pending" && eventStatus.isBlank()){
      MailApp.sendEmail(staffEmail, 
        "Request for " + name + " meeting on " + formattedStart + " " + formattedSTime + " - " + formattedETime,
        "Hello " + staffMember + "," + "\n" + "\n" + volunteer + " has requested a " + name + " meeting on: " + "\n" + formattedStart + ", starting at " + formattedSTime + " and estimated to end around " + formattedETime + "." + "\n" + "\n" + booker + "has given the following reason or agenda for this meeting:" + "\n" + description + "\n" + "\n" + "The following people are also invited to attend this meeting: " + guests + "." + "\n" + "\n" + "Here is a list of the events in the calendar for " + date + ":" + "\n" + start + "\n" + "\n" + "Wishing you a wonderful day.");
    }
    if (approvalStatus == "Not available" && eventStatus.isBlank()){
      MailApp.sendEmail(booEmail,
        "Conflict: " + name + " meeting on " + formattedStart + " " + formattedSTime + ", please try a different time",
        "Hello " + booker + "," + "\n" + "\n" + "I am not available for a " + name + " meeting on " + formattedStart + " " + formattedSTime + " - " + formattedETime + ". Please try a different time and/or date.");
    }
  }  
}

有什么想法吗?你有什么不同的做法吗?

标签: google-apps-script

解决方案


您在这里缺少右括号:) time and/or date.;


推荐阅读