我正在尝试找出如何检索和报告日历事件的详细信息,包括所有客人及其电子邮件地址。
我也尝试过这个,但只检索到一个电子邮件地址(有时):
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 = "[email protected]";
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
}
}
代码大部分都有效,但我没有获得活动的完整来宾名单,有时我得到的是会议室的名称和日历地址。
如果特定活动的来宾名单很大,我也无法获得特定日期的所有活动。
问题在于“行”值,因为它没有按照您的意愿进行迭代。因为每次内部for完成时,“行”值都会再次设置为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”,我将其放在外部 for 之外,并将“row = row + d”切换为简单的“row ++”(并将其放在内部 for 内部)。
关于其他问题:
1)资源(会议室)被视为另一位客人,因此如果您不希望它在那里,您可以在条件中使用“If”和资源的电子邮件来避免这种情况(他们的电子邮件以@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 不会让您知道)未向您发送电子邮件的用户的姓名)。
我遇到这个是因为我有相同的用例。我尝试了这个脚本,效果很好!但是, getMyStatus 不返回任何值。可能是什么原因?