为什么我不能 return 使用 App 脚本从日历邀请中获取特定电子邮件地址的列表?
Why can't I return a list of specific email addresses from a Calendar invite with App Script?
我正在尝试 return 使用脚本在 GSuite 日历上列出所有活动参与者的特定电子邮件地址,但我只能 return ID 号或出现的列表仅作为 "EventGuest, EventGuest, EventGuest...."
是否可以 return 电子邮件地址本身?在此先感谢您的指导!
这是我正在使用的基本脚本:
function listCalendarAttendees(){
var calendar = CalendarApp.getCalendarById('AnyCalendarTEST@gmail.com');
var sheet = SpreadsheetApp.openById('TEST ID').getSheetByName('Bobs Calendar');
var startTime = new Date();
var endTime = new Date(startTime.getTime()+(1000*60*60*24*7));
var events = calendar.getEvents(startTime, endTime);
Logger.log('Number '+events.length);
for(var x=0;x<events.length;x++){
var event = events[x];
var messages = event.getTitle();
var eventStart = event.getStartTime();
var emails = event.getCreators().toString();
var descriptions = event.getDescription();
var guestListLength = event.getGuestList().length;
var guestListNames =event.getGuestList().toString();
sheet.appendRow([messages,eventStart,emails,descriptions,guestListLength,guestListNames]);
}
}
- 您想检索活动中所有来宾的电子邮件。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
getGuestList()
returns EventGuest[]
的对象。在这种情况下,可以通过 getEmail()
从 EventGuest
. 检索电子邮件
- for循环中使用
appendRow()
时,处理成本会很高。所以在本次修改中,使用setValues()
代替
修改后的脚本:
当你的脚本修改后,变成如下。
从:
for(var x=0;x<events.length;x++){
var event = events[x];
var messages = event.getTitle();
var eventStart = event.getStartTime();
var emails = event.getCreators().toString();
var descriptions = event.getDescription();
var guestListLength = event.getGuestList().length;
var guestListNames =event.getGuestList().toString();
sheet.appendRow([messages,eventStart,emails,descriptions,guestListLength,guestListNames]);
}
到:
var values = []; // Added
for(var x=0;x<events.length;x++){
var event = events[x];
var messages = event.getTitle();
var eventStart = event.getStartTime();
var emails = event.getCreators().toString();
var descriptions = event.getDescription();
var guestListLength = event.getGuestList().length;
var guestListNames = event.getGuestList().map(function(e) {return e.getEmail()}).join(","); // Modified
values.push([messages,eventStart,emails,descriptions,guestListLength,guestListNames]); // Modified
}
sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values); // Added
- 在此修改中,电子邮件由
,
分隔并放入一个单元格中。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
Event Guest 是一个对象。这是它的方法:
我正在尝试 return 使用脚本在 GSuite 日历上列出所有活动参与者的特定电子邮件地址,但我只能 return ID 号或出现的列表仅作为 "EventGuest, EventGuest, EventGuest...."
是否可以 return 电子邮件地址本身?在此先感谢您的指导!
这是我正在使用的基本脚本:
function listCalendarAttendees(){
var calendar = CalendarApp.getCalendarById('AnyCalendarTEST@gmail.com');
var sheet = SpreadsheetApp.openById('TEST ID').getSheetByName('Bobs Calendar');
var startTime = new Date();
var endTime = new Date(startTime.getTime()+(1000*60*60*24*7));
var events = calendar.getEvents(startTime, endTime);
Logger.log('Number '+events.length);
for(var x=0;x<events.length;x++){
var event = events[x];
var messages = event.getTitle();
var eventStart = event.getStartTime();
var emails = event.getCreators().toString();
var descriptions = event.getDescription();
var guestListLength = event.getGuestList().length;
var guestListNames =event.getGuestList().toString();
sheet.appendRow([messages,eventStart,emails,descriptions,guestListLength,guestListNames]);
}
}
- 您想检索活动中所有来宾的电子邮件。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
getGuestList()
returnsEventGuest[]
的对象。在这种情况下,可以通过getEmail()
从EventGuest
. 检索电子邮件
- for循环中使用
appendRow()
时,处理成本会很高。所以在本次修改中,使用setValues()
代替
修改后的脚本:
当你的脚本修改后,变成如下。
从:for(var x=0;x<events.length;x++){
var event = events[x];
var messages = event.getTitle();
var eventStart = event.getStartTime();
var emails = event.getCreators().toString();
var descriptions = event.getDescription();
var guestListLength = event.getGuestList().length;
var guestListNames =event.getGuestList().toString();
sheet.appendRow([messages,eventStart,emails,descriptions,guestListLength,guestListNames]);
}
到:
var values = []; // Added
for(var x=0;x<events.length;x++){
var event = events[x];
var messages = event.getTitle();
var eventStart = event.getStartTime();
var emails = event.getCreators().toString();
var descriptions = event.getDescription();
var guestListLength = event.getGuestList().length;
var guestListNames = event.getGuestList().map(function(e) {return e.getEmail()}).join(","); // Modified
values.push([messages,eventStart,emails,descriptions,guestListLength,guestListNames]); // Modified
}
sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values); // Added
- 在此修改中,电子邮件由
,
分隔并放入一个单元格中。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
Event Guest 是一个对象。这是它的方法: