Google apps script 仅在工作日从Google工作表创建重复的Google日历事件
下面的代码工作得很好。但是,我现在需要让重复事件仅在工作日(M-F)出现。 例如,如果我在2014年9月2日安排了一次定期会议,那么未来的会议最终将在周末举行。 这些定期会议怎么可能只在工作日出现? 例如,如果会议在星期六举行,则将其移至星期五的前一天。另一方面,如果会议在星期天举行,则将其移至下一天(星期一)。 这可能吗 我尝试过使用CalendarApp.Weekday.MONDAY等…函数,但它最终通过代码中的.addMonthlyRule()函数进行了编写Google apps script 仅在工作日从Google工作表创建重复的Google日历事件,google-apps-script,google-sheets,google-calendar-api,recurring-events,Google Apps Script,Google Sheets,Google Calendar Api,Recurring Events,下面的代码工作得很好。但是,我现在需要让重复事件仅在工作日(M-F)出现。 例如,如果我在2014年9月2日安排了一次定期会议,那么未来的会议最终将在周末举行。 这些定期会议怎么可能只在工作日出现? 例如,如果会议在星期六举行,则将其移至星期五的前一天。另一方面,如果会议在星期天举行,则将其移至下一天(星期一)。 这可能吗 我尝试过使用CalendarApp.Weekday.MONDAY等…函数,但它最终通过代码中的.addMonthlyRule()函数进行了编写 // Date
// Date | Title | Start Time | End Time | Location | Description | Recurring (months) | EventID
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Export Events",
functionName : "exportEvents"
}];
sheet.addMenu("Calendar Actions", entries);
};
/*** Export events from spreadsheet to calendar */
function exportEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 1; // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "airliquide.com_ro3r20vk2rhm506fr2toq4vh5c@group.calendar.google.com";
var cal = CalendarApp.getCalendarById(calId);
for (i in data) {
if (i < headerRows) continue; // Skip header row(s)
var row = data[i];
var date = new Date(row[0]); // First column
var title = row[1]; // Second column
var tstart = setTimeToDate(date,row[2]);
var tstop = setTimeToDate(date,row[3]);
Logger.log('date = '+date+'tstart = '+tstart+' tstop = '+tstop);
var loc = row[4];
var desc = row[5];
var times = row[6]
var id = row[7];
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
event.setTitle('got you');// this is to "force error" if the event does not exist, il will never show for real ;-)
}catch(e){
var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}); // create a "normal" event
row[7] = newEvent.getId(); // Update the data array with event ID
Logger.log('event created');// while debugging
var event = cal.getEventSeriesById(row[7]);// make it an event Serie
}
event.setTitle(title);
event.setDescription(desc);
event.setLocation(loc);
var recurrence = CalendarApp.newRecurrence().addMonthlyRule().interval(times)
//.onlyOnWeekdays(
//[CalendarApp.Weekday.MONDAY, CalendarApp.Weekday.TUESDAY, CalendarApp.Weekday.WEDNESDAY, CalendarApp.Weekday.THURSDAY, CalendarApp.Weekday.FRIDAY]);
event.setRecurrence(recurrence, tstart, tstop);// we need to keep start and stop otherwise it becomes an AllDayEvent if only start is used
}
range.setValues(data);
}
function setTimeToDate(date,time){
var t = new Date(time);
var hour = t.getHours();
var min = t.getMinutes();
var sec = t.getSeconds();
var dateMod = new Date(date.setHours(hour,min,sec,0))
return dateMod;
}
//日期|标题|开始时间|结束时间|地点|描述|周期(月)|事件ID
函数onOpen(){
var sheet=SpreadsheetApp.getActiveSpreadsheet();
变量项=[{
名称:“导出事件”,
函数名:“exportEvents”
}];
sheet.addMenu(“日历操作”,条目);
};
/***将事件从电子表格导出到日历*/
函数exportEvents(){
var sheet=SpreadsheetApp.getActiveSheet();
var headerRows=1;//标题信息的行数(要跳过)
var range=sheet.getDataRange();
var data=range.getValues();
var calId=“airliquide.com_ro3r20vk2rhm506fr2toq4vh5c@group.calendar.google.com";
var cal=CalendarApp.getCalendarById(calId);
对于(数据中的i){
如果(i
您可以使用以下命令获取一周中的哪一天:
var d = new Date();
var n = d.getDay();
星期日是0,星期一是1等等。我明白了,但如何利用这一点让重复发生的事件只在工作日出现?@Arsene de Conde-使用您的逻辑是不可能的,或者至少是非常复杂的,因为每个事件都应该根据一周中的某一天进行检查,并针对这个特定事件进行修改(我认为脚本是不可能的)... 我建议您从电子表格中创建单独的事件,在电子表格中可以精确控制日期和日期(因为还有假期要检查!)。看到你最近的其他帖子,我想这就是你正在做的,对吗?是的。谢谢Serge!这是有道理的。