【问题标题】:Retrieve Guest List from Calendar - Google Apps Script (GAS)从日历中检索访客列表 - Google Apps 脚本 (GAS)
【发布时间】:2019-06-05 19:47:52
【问题描述】:

我正在尝试弄清楚如何检索和报告日历活动的详细信息,包括所有客人及其电子邮件地址。

我也试过这个,但只检索到一个电子邮件地址(有时):

function getEmailsFromArray(guestsArray){
var guestEmails = [];
for (var i=0;i<guestsArray.length;i++) {
  guestEmails.push(guestsArray[i].getEmail());
}
return guestEmails; }

这是我现在使用的代码。救命!

function export_gsheet(){

var mycal = "myemailaddress@mine.com";
var cal = CalendarApp.getCalendarById(mycal);

var events = cal.getEvents(new Date("May 02, 2019 00:00:00 PST"), new Date("May 03, 2019 00:00:00 PST"));

var sheet = SpreadsheetApp.getActiveSheet();

var header = [["Calendar Address", "Event Title", "Event Description", "Calculated Duration", "Attendees", "Email", "MyStatus", "Created By", "All Day Event", "Recurring Event", "Event Location", "Event Start", "Event End", "Visibility", "Date Created", "Last Updated"]]
var range = sheet.getRange(2,1,1,16);
range.setValues(header);


for (var i=0;i<events.length;i++) {
var row=i+3;
var myformula_placeholder = '';

  var guestList=events[i].getGuestList();   //GET THE EMAIL AND STATUS OF EACH GUEST FOR EACH EVENT 
  for(var d=0; guestList!=null && d<guestList.length; d++)
    {
      var details=[[mycal,events[i].getTitle(), events[i].getDescription(), myformula_placeholder, guestList[d].getName(), guestList[d].getEmail(), events[i].getMyStatus(), events[i].getCreators(), events[i].isAllDayEvent(), events[i].isRecurringEvent(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime(), ('' + events[i].getVisibility()), events[i].getDateCreated(), events[i].getLastUpdated()]];
      var range=sheet.getRange(row,1,1,16);
      Logger.log(details);

        var range2 = sheet.getRange(row+d,1,1,16);
        range2.setValues(details);

    }
    row=row+d; // increment row to start the next output after the previous output
}
}

代码大部分都有效,但我没有获得活动的完整宾客名单,有时我会获得会议室的名称和日历地址。

如果特定活动的宾客名单很大,我也不会在特定日期获得所有活动。

【问题讨论】:

标签: javascript google-sheets google-api google-calendar-api google-sheets-api


【解决方案1】:

问题在于“行”值,因为它没有按照您的意愿进行迭代。因为每次inner for完成时,“row”值又被设置为3。此外,在内部 for 的第二次迭代中,“d”值再次为 0,因此您不应将“行”值依赖于“d”值。我修好了,它适用于我一天中的所有事件,如下所示:

var row=3;
for (var i=0;i<events.length;i++) {

var myformula_placeholder = '';

  var guestList=events[i].getGuestList();   //GET THE EMAIL AND STATUS OF EACH GUEST FOR EACH EVENT 
  for(var d=0; guestList!=null && d<guestList.length; d++)
    {      
      var details=[[mycal,events[i].getTitle(), events[i].getDescription(), myformula_placeholder, guestList[d].getName(), guestList[d].getEmail(), events[i].getMyStatus(), events[i].getCreators(), events[i].isAllDayEvent(), events[i].isRecurringEvent(), events[i].getLocation(), events[i].getStartTime(), events[i].getEndTime(), ('' + events[i].getVisibility()), events[i].getDateCreated(), events[i].getLastUpdated()]];
      var range=sheet.getRange(row,1,1,16);
      Logger.log(details);

        var range2 = sheet.getRange(row,1,1,16);
        range2.setValues(details);
        row++; // increment row to start the next output after the previous output
    }   
}
}

唯一的变化是“row=3”,我把它放在了外部,并用简单的“row++”切换了“row=row+d”(并将它放在内部)。

关于其他问题:

1) 资源(会议室)被视为另一位客人,因此如果您不希望它在那里,您可以在条件下使用“如果”和资源的电子邮件来避免这种情况(他们的电子邮件以 @ 结尾resource.calendar.google.com)。

2) 检查您使用的是您想要的确切时区,在这种情况下,您使用的是 PST 时间,因此日历也应该是 PST 时间。 (或者干脆不放任何时区,它将采用与脚本相同的时区,我想它与日历相同)。

编辑

您还可以查看有关每位客人的更多信息,请查看此处的文档: https://developers.google.com/apps-script/reference/calendar/event-guest

如果您希望所有者也在来宾列表中,则必须使用 getGuestList(true) 和内部的布尔值。文档: https://developers.google.com/apps-script/reference/calendar/calendar-event#getguestlist

最后,如果某些受邀者的姓名没有出现(但应该会出现该行中的其余信息),可能是因为您没有被授予查看该信息的权限(Google 不允许你知道没有给你发邮件的用户的名字)。

【讨论】:

  • 谢谢安德烈斯!问题在于您的代码我只能获得一个访客电子邮件地址。有没有办法对其进行调整,以便我可以获取会议参与者的所有电子邮件地址/姓名?
  • 别担心,我已经更新了答案,检查代码。在我的测试中,它运行顺利,我之前没有联系过的客人的“姓名列”为空,但其余信息都在行中。
猜你喜欢
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
相关资源
最近更新 更多