Google apps script 从Spreasheet到Google日历创建事件
我有这个 我的任务的截止日期有两列 我如何创建一个脚本,根据这些到期日期创建事件,并在它们到期前几天通知我Google apps script 从Spreasheet到Google日历创建事件,google-apps-script,google-sheets,scheduled-tasks,google-calendar-api,Google Apps Script,Google Sheets,Scheduled Tasks,Google Calendar Api,我有这个 我的任务的截止日期有两列 我如何创建一个脚本,根据这些到期日期创建事件,并在它们到期前几天通知我 感谢从电子表格创建事件 getEvent()读取下面的电子表格,该电子表格与您提供的电子表格非常相似,我将对其进行一些修改。我添加了一个事件标题和描述列。Scheduled列提供了在脚本再次运行时防止重复事件的功能。计划列是数据验证(“是”/“否”) 动画: function getEventData() { var ss=SpreadsheetApp.getActive();
感谢从电子表格创建事件
getEvent()
读取下面的电子表格,该电子表格与您提供的电子表格非常相似,我将对其进行一些修改。我添加了一个事件标题和描述列。Scheduled列提供了在脚本再次运行时防止重复事件的功能。计划列是数据验证(“是”/“否”)
动画:
function getEventData() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('EventData');
var sr=4;//data start row
var lc=8;//last column
var hA=sh.getRange(sr-1,1,1,lc).getValues()[0];
var idx={};//correlate column header to evA indices
hA.forEach(function(e,i){idx[e]=i;});//This creates an object for identifying array indices through the use of Column header name making it a bit easier to associate data with their value descriptions
var rg=sh.getRange(sr,1,sh.getLastRow()-sr+1,lc );
var evA=rg.getDisplayValues();
evA.forEach(function(r,i){
if(r[idx.Scheduled]!='Yes') {
var eObj={};
eObj.start=r[idx.Start];
eObj.end=r[idx.End];
eObj.title=r[idx.Title];
eObj.description=Utilities.formatString('<b>Name:</b> %s,%s<br /><b>Age:</b> %s<br /><b>Description:</b> %s',r[idx.Last],r[idx.First],r[idx.Age],r[idx.Description]);
if(createEventWithReminders(eObj)) {
sh.getRange(i+sr,idx.Scheduled+1).setValue('Yes');
}else{
sh.getRange(i+sr,idx.Scheduled+1).setValue('No');
}
}
});
}
//{start:dd/MM/yyyy,end:dd/MM/yyyy,title:string,description:string}
function createEventWithReminders(eObj) {
if(eObj.start && eObj.end && eObj.title && eObj.description) {
var minute=1;
var hour=60*minute;
var day=24*hour;
var week=7*day;
var cal=CalendarApp.getCalendarById('Enter your calendar id');
var sA=eObj.start.split('/');//splits the date string into fullyear,month and day
var start=new Date(sA[2],sA[1]-1,sA[0]);//creates the start date notice the month-1
var eA=eObj.end.split('/');
var end=new Date(eA[2],eA[1]-1,eA[0]);
var event=cal.createEvent(eObj.title, start, end);
event.setDescription(eObj.description)
event.setTitle(eObj.title)
event.addEmailReminder(day);//creates a one day prior reminder
event.addEmailReminder(week);//creates a one week prior reminder
return true;
}else{
return false;
}
}