将客人添加到日历活动 [英] Adding guests to calendar event
问题描述
我有一个脚本,可以通过电子表格为客人添加事件,但只会添加循环中的第一个客人。记录器显示人员列表,但只有一个人被添加到日历中。这里是我的代码:
pre $ for(var i = 0; i< registrationData.length; i ++){
var session = registrationData [i] [0];
var email = registrationData [i] [2];
var eventId = session.toString()。replace(@ google.com,);
var event = Calendar.Events.get(sharedCalendar,eventId);
var add = calendarApp.getCalendarById(sharedCalendar).getEventSeriesById(session).addGuest(email);
我还创建了一个新的日历高级服务链接,该事件已从用户日历中删除的消息。这可能是因为他们没有被首先以客人身份正确添加?
var link = Calendar.Events.get(usersCalendar,eventId).htmlLink;
感谢任何可以帮助您的人!
编辑:新的工作循环与Serge的神话般的帮助
for(var i = 0; i< ; registrationData.length; i ++){
var guestEmail = registrationData [i] [2];
var eventId = registrationData [i] [0];
var session = eventId.toString()。replace(@ google.com,);
var event = CalendarApp.getCalendarById(sharedCalendar).getEventSeriesById(eventId);
var link = Calendar.Events.get(sharedCalendar,session).htmlLink;
event.addGuest(guestEmail);
Logger.log('guest for i ='+ i +'is'+ guestEmail);
编辑:您的编辑:
试试这样:
for(var i = 0; i< registrationData.length; i ++){
var session = registrationData [i] [0];
var eventId = session.toString()。replace(@ google.com,); //是否真的是事件ID?
var event = sharedCalendar.getEventSeriesById(session);
var inviteList = registrationData [i] [2] .split(','); //假设您的guestlist以逗号分隔
if(inviteList.length> 0){
for(var n in inviteList){
event.addGuest(email);
code
$ b $ hr
编辑2添加日志并修改代码
尝试添加几个日志来检查您的数据,修改后的代码如下:
for(var i = 0; i< registrationData.length; i ++){
var email = registrationData [i] [2];
var session = registrationData [i] [0];
var event = CalendarApp.getCalendarById(sharedCalendar).getEventSeriesById(session);
var inviteList = email.split(','); //假设您的guestlist以逗号分隔
Logger.log('email ='+ email +'ID ='+ session);
if(inviteList.length> 0){
for(varList in inviteList){
var link = event.htmlLink; //我不知道这个方法...哪里是它有记录吗?
Logger.log('event Title ='+ event.getTitle()+' - guest ='+ inviteList [n]);
event.addGuest(inviteList [n]);
检查菜单/视图/日志中的日志以查看如果你的数据是正确的(或不)
为什么你使用2个调用,一个是calendarApp,另一个是Calendar高级)?您可以写下 calendarApp.getCalendarById(sharedCalendar).getEventSeriesById(session).addGuest(email)
以下是
我前段时间写的脚本邀请所有电子邮件的人自动地在描述中。它有一个实际添加客人的循环。它很好地工作。
A 电子表格示例(只读,制作副本)
//将下面的ID更新到您的副本ID并运行Callist()函数以获取第一张表上的日历ID。
//为myOnOpen函数设置一个onOpen触发器
var ss = SpreadsheetApp.openById('1xDOaoSl3HbkS95cj8Jl-82rdiui7G0sFz96PIO6iVF4'); //这个电子表格
var calNamesSheet = ss.getSheetByName('calNames );
var calList = calNamesSheet.getDataRange()。getValues();
函数MyOnOpen(){
var menuEntries = [{name:在所有列出的日历上显示的劳森autoInvite,functionName:autoInviteAllCals},
{name:delete created sheet,functionName:delsheets}
];
ss.addMenu(Tracking utilities,menuEntries); //
}
函数autoInviteAllCals(){
var today = new Date(); // now
var startDate = new Date(today.setHours(0,0,0,0)); // today @ 0 AM
var endDate = new Date(new Date(startDate).setDate (startDate.getDate()+ 7)); //调整时间帧以读取= 7天
(var nn = 0; nn< calList.length; nn ++){
var logArray = new Array();
logArray.push(['Calendar + Title','Description','Start','End','Location','Creators','创建日期','Duration','Guests']);
var calName = calList [nn] [0];
var calId = calList [nn] [1];
var Calendar = CalendarApp.getCalendarById(calId);
var events = Calendar.getEvents(startDate,endDate);
if(events [0]){
for(var i = 0; i< events.length; i ++){
var row = new Array();
row.push(calName +':'+ events [i] .getTitle());
row.push(events [i] .getDescription());
row.push(Utilities.formatDate(events [i] .getStartTime(),Session.getScriptTimeZone(),MMM-dd-yy)+'@'+ Utilities.formatDate(events [i] .getStartTime (),Session.getScriptTimeZone(),HH:mm));
row.push(Utilities.formatDate(events [i] .getEndTime(),Session.getScriptTimeZone(),MMM-dd-yy)+'@'+ Utilities.formatDate(events [i] .getEndTime (),Session.getScriptTimeZone(),HH:mm));
row.push(events [i] .getLocation());
row.push(events [i] .getCreators()。join());
row.push('on'+ Utilities.formatDate(events [i] .getLastUpdated(),Session.getScriptTimeZone(),MMM-dd-yyyy));
row.push(((events [i] .getEndTime() - events [i] .getStartTime())/ 3600000)+'hours'); //持续时间
var inviteList = checkInvites(events [一世]);
if(inviteList.length == 0){//如果在checkInvites()中发现guest,那么不要从事件中读取它,因为checkInvites()将它们添加到cal但该事件尚未更新
var list = events [i] .getGuestList();
for(n = 0; n } else {
for(var in InviteList){
events [i] .addGuest(inviteList [n]);
}
}
row.push(inviteList.join(','));
logArray.push(row);
}
}
// Logger.log(logArray);
if(logArray.length == 0){continue};
尝试{
var sheetToWrite = ss.insertSheet(calName,ss.getNumSheets()); //创建工作表(如果不存在)
} catch(err){
var sheetToWrite = ss.getSheetByName(calName); // else open
$ b $ sheetToWrite.getRange(1,1,logArray.length,logArray [0] .length).setValues(logArray).setHorizontalAlignment( '剩下'); //增强格式化
sheetToWrite.getRange(1,1,1,logArray [0] .length).setBackground('#EEA')。setBorder(true,true,true,true,true,true).setHorizontalAlignment ( '左')使用SetFontSize(12)。
for(var w in logArray [0]){
sheetToWrite.setColumnWidth(Number(w)+1,180);
函数checkInvites(event){
var email = [];
//下面是2个不同的正则表达式,用于从标题字符串中获取电子邮件。它们返回一组有效的电子邮件。
//工作得很好,我真的不知道为什么要选择其中一个或者另一个...,请选择!
var title = event.getTitle();
if(title.indexOf('@')== - 1){return email};
email = title.match(/([\ w-\。] +)@((?:[\ w] + \。)+)([a-zA-Z] {2 ,4})/克);
Logger.log('email var1 ='+ JSON.stringify(email));
var regex = /(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a- !?Z0-9#$%&放大器;'* + \ / = ^ _`{|}〜 - ] +)* |(:[\x01-\x08\x0b\x0c\ x0e-\x1f\x21\x23-\x5b\x5d-\x7f] | \\ [\x01-\x09\x0b\x0c\x0e-\x7f] )*)@(:(:[α-Z0-9](:???[A-Z0-9 - ] * [A-Z0-9])?。\)+ [A-Z0-9 ](?:[A-Z0-9 - ] * [A-Z0-9])|?\ [(:( ?: 25 [0-5] | 2 [0-4] [0-9] ?| [01] [0-9] [0-9])\){3}(?: 25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9] | [A-Z0-9 - ] * [A-Z0-9]:?(:\x01-\x08\x0b\x0c\x0e- \x1f\x21-\x5a\x53-\x7f] | \\ [\x01-\x09\x0b\x0c\x0e-\x7f])+)\ ])/ gm
email = title.match(regex);
Logger.log('email var2 ='+ JSON.stringify(email));
返回电子邮件;
函数delsheets(){
var numSheets = ss.getNumSheets() - 1;
for(var n = numSheets; n> 0; n - ){
if(ss.getSheets()[n] .getName()!='calNames'){
ss .deleteSheet(ss.getSheets()[N]);
Utilities.sleep(400);
}
}
}
//这个小函数是获取日历名称列表&您可以访问的ID,请编辑calNames表以仅保留要监控的ID(不含空行)。
函数Callist(){
calNamesSheet.getDataRange()。clearContent();
var list = new Array();
var store = new Array();
list = CalendarApp.getAllCalendars()
(n = 0; n var name = list [n] .getName();
var id = list [n] .getId();
store.push([name,id])
}
calNamesSheet.getRange(1,1,store.length,store [0] .length).setValues(store);
}
// Serge insas - 08-2014
I have a script which adds guests to an event from a spreadsheet, but it is only adding the first guest from the loop. Logger shows the list of people, yet only one gets added in the calendar. Here is my code:
for (var i = 0; i < registrationData.length; i++) {
var session = registrationData[i][0];
var email = registrationData[i][2];
var eventId = session.toString().replace("@google.com","");
var event = Calendar.Events.get(sharedCalendar, eventId);
var add = calendarApp.getCalendarById(sharedCalendar).getEventSeriesById(session).addGuest(email);
I also create a link with new calendar advanced services which goes out in an email, yet I just get the message that the event was deleted from the users calendar. Could this be because they aren't being added properly as a guest first?
var link = Calendar.Events.get(usersCalendar, eventId).htmlLink;
Thanks to anyone who can help!
Edit: New working loop with Serge's fabulous help
for (var i = 0; i < registrationData.length; i++) {
var guestEmail = registrationData[i][2];
var eventId = registrationData[i][0];
var session = eventId.toString().replace("@google.com","");
var event = CalendarApp.getCalendarById(sharedCalendar).getEventSeriesById(eventId);
var link = Calendar.Events.get(sharedCalendar, session).htmlLink;
event.addGuest(guestEmail);
Logger.log('guest for i='+i+' is '+guestEmail);
}
解决方案 EDIT : following your edit :
try it like this :
for (var i = 0; i < registrationData.length; i++) {
var session = registrationData[i][0];
var eventId = session.toString().replace("@google.com","");// is that really the event Id ?
var event = sharedCalendar.getEventSeriesById(session);
var inviteList = registrationData[i][2].split(',');//assuming your guestlist is comma separated
if (inviteList.length>0){
for(var n in inviteList){
event.addGuest(email);
}
}
}
EDIT 2 adding Logs and adapting your code
try to add a few Logs to check your data, modified code below :
for (var i = 0; i < registrationData.length; i++) {
var email = registrationData[i][2];
var session = registrationData[i][0];
var event = CalendarApp.getCalendarById(sharedCalendar).getEventSeriesById(session);
var inviteList = email.split(',');//assuming your guestlist is comma separated
Logger.log('email='+email+' ID='+session);
if (inviteList.length>0){
for(var n in inviteList){
var link = event.htmlLink;// I don't know this method ... where is it documented ?
Logger.log('event Title='+event.getTitle()+' - guest='+inviteList[n]);
event.addGuest(inviteList[n]);
}
}
check the log in menu/view/logs to see if your data is right (or not)
why are you using 2 calls, one to calendarApp and another to Calendar (advanced) ? you could write calendarApp.getCalendarById(sharedCalendar).getEventSeriesById(session).addGuest(email)
below is the script that I wrote some time ago that invites all people who's emails are in the description automatically. it has a loop that actually adds the guests. And it works nicely.
A spreadsheet example (read only, make a copy to use)
// update the ID below to your copy ID and run the Callist() function to get the calendars ID on first sheet.
//set up an onOpen trigger for the myOnOpen function
var ss = SpreadsheetApp.openById('1xDOaoSl3HbkS95cj8Jl-82rdiui7G0sFz96PIO6iVF4');// this spreadsheet
var calNamesSheet = ss.getSheetByName('calNames');
var calList = calNamesSheet.getDataRange().getValues();
function MyOnOpen() {
var menuEntries = [ {name: "Lauch autoInvite on all listed calendars", functionName: "autoInviteAllCals"},
{name: "delete created sheets", functionName: "delsheets"}
];
ss.addMenu("Tracking utilities",menuEntries);//
}
function autoInviteAllCals(){
var today = new Date(); // now
var startDate = new Date(today.setHours(0,0,0,0));// today @ 0 AM
var endDate = new Date(new Date(startDate).setDate(startDate.getDate()+7)); // adjust time frame to read here = 7 days
for(var nn=0;nn<calList.length;nn++){
var logArray = new Array();
logArray.push(['Calendar + Title','Description','Start','End','Location','Creators','Date Created','Duration','Guests']);
var calName = calList[nn][0];
var calId = calList[nn][1];
var Calendar = CalendarApp.getCalendarById(calId);
var events = Calendar.getEvents(startDate , endDate);
if (events[0]) {
for (var i = 0; i < events.length; i++) {
var row = new Array();
row.push(calName +' : '+events[i].getTitle());
row.push(events[i].getDescription());
row.push(Utilities.formatDate(events[i].getStartTime(), Session.getScriptTimeZone(), "MMM-dd-yy")+' @ ' +Utilities.formatDate(events[i].getStartTime(), Session.getScriptTimeZone(), "HH:mm"));
row.push(Utilities.formatDate(events[i].getEndTime(), Session.getScriptTimeZone(), "MMM-dd-yy")+' @ ' +Utilities.formatDate(events[i].getEndTime(), Session.getScriptTimeZone(), "HH:mm"));
row.push(events[i].getLocation());
row.push(events[i].getCreators().join());
row.push('on '+Utilities.formatDate(events[i].getLastUpdated(), Session.getScriptTimeZone(), "MMM-dd-yyyy"));
row.push(((events[i].getEndTime() - events[i].getStartTime()) / 3600000)+' hours');//duration
var inviteList = checkInvites(events[i]);
if (inviteList.length==0){ // if guests were found in checkInvites() then don't read it from event since checkInvites() added them to the cal but this event is not yet updated
var list = events[i].getGuestList();
for(n=0;n<list.length;++n){inviteList.push(list[n].getEmail())};
}else{
for(var n in inviteList){
events[i].addGuest(inviteList[n]);
}
}
row.push(inviteList.join(', '));
logArray.push(row);
}
}
// Logger.log(logArray);
if(logArray.length==0){continue};
try{
var sheetToWrite = ss.insertSheet(calName,ss.getNumSheets());// create sheet if doesn't exist
}catch(err){
var sheetToWrite = ss.getSheetByName(calName);// else open it
}
sheetToWrite.getRange(1,1,logArray.length,logArray[0].length).setValues(logArray).setHorizontalAlignment('left'); // enhance formating
sheetToWrite.getRange(1,1,1,logArray[0].length).setBackground('#EEA').setBorder(true,true,true,true,true,true).setHorizontalAlignment('left').setFontSize(12);
for(var w in logArray[0]){
sheetToWrite.setColumnWidth(Number(w)+1,180);
}
}
}
function checkInvites(event){
var email = [];
// below are 2 different regex to get emails from the title string.They return an array of valid emails.
//both work very well, I don't really know why choose one or the other..., make your choice !
var title = event.getTitle();
if(title.indexOf('@')==-1){return email};
email = title.match(/([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})/g);
Logger.log('email var1 = '+JSON.stringify(email));
var regex = /(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/gm
email = title.match(regex);
Logger.log('email var2 = '+JSON.stringify(email));
return email;
}
function delsheets(){
var numSheets = ss.getNumSheets()-1;
for(var n = numSheets ; n>0 ; n--){
if(ss.getSheets()[n].getName() != 'calNames'){
ss.deleteSheet(ss.getSheets()[n]);
Utilities.sleep(400);
}
}
}
// This small function is to get the list of calendar names & Ids that you have access to, please edit the calNames sheet to keep only the ones you want to monitor (without empty rows).
function Callist(){
calNamesSheet.getDataRange().clearContent();
var list = new Array();
var store = new Array();
list = CalendarApp.getAllCalendars()
for (n=0;n<list.length;++n){
var name = list[n].getName() ;
var id = list[n].getId() ;
store.push( [name,id])
}
calNamesSheet.getRange(1,1,store.length,store[0].length).setValues(store);
}
// Serge insas - 08-2014
这篇关于将客人添加到日历活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!