将客人添加到日历活动 [英] Adding guests to calendar event

查看:264
本文介绍了将客人添加到日历活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个脚本,可以通过电子表格为客人添加事件,但只会添加循环中的第一个客人。记录器显示人员列表,但只有一个人被添加到日历中。这里是我的代码:

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).setHorizo​​ntalAlignment( '剩下'); //增强格式化
sheetToWrite.getRange(1,1,1,logArray [0] .length).setBackground('#EEA')。setBorder(true,true,true,true,true,true).setHorizo​​ntalAlignment ( '左')使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆