我想让谷歌工作表在谷歌日历上创建一个重复事件。
有没有办法让这部分代码依赖于电子表格中的变量?我希望能够在我的电子表格上选择一周中的几天,而不必键入它们。
.onlyOnWeekday([CalendarApp.Weekday.MONDAY,CalendarApp.Weekday.WEDNESDAY])
这是我的功能
function newStudentCalendar() {
var app = SpreadsheetApp;
var sheet = app.getActiveSpreadsheet().getActiveSheet();
var studentName = sheet.getRange(2, 1).getValue();
// set time variables for lesson creation
var year = sheet.getRange(2, 5).getValue();
var month = sheet.getRange(2, 3).getValue();
var day1 = sheet.getRange(2, 4).getValue();
var startTime = sheet.getRange(2, 6).getValue();
var endTime = sheet.getRange(2, 7).getValue();
//Creates the new students calendar
var calendar = CalendarApp.createCalendar(studentName);
Logger.log('Created the calendar "%s", with the ID "%s".',
calendar.getName(), calendar.getId());
var calendarID = calendar.getId()
//Creates the recuring lessons
var lessons = CalendarApp.getCalendarById(calendarID).createEventSeries(studentName + " lesson",
new Date(month + day1 + ',' + year + ' ' + startTime),
new Date(month + day1 + ',' + year + ' ' + endTime),
CalendarApp.newRecurrence().addWeeklyRule()
.onlyOnWeekdays([CalendarApp.Weekday.MONDAY, CalendarApp.Weekday.WEDNESDAY]));
Logger.log('Event Series ID: ' + lessons.getId());
}
这是完全可能的。为此,只需添加一行即可读取特定单元格中的值。该特定单元格将保存重复日期的名称。类似这样的东西:
var weekDay = SpreadsheetApp.getActive().getSheetByName('YOUR SHEET')
.getRange('YOUR_WEEKDAY_RANGE').getValue();
之后,假设工作日正确键入并使用大写字母,则可以运行此代码创建具有适当重复日期的事件:
// This will throw an error if the weekday is not valid.
var weekDayObject = CalendarApp.Weekday[weekDay];
CalendarApp.newRecurrence().addWeeklyRule()
.onlyOnWeekdays([weekDayObject]));
此外,如果您希望在一个单元格中有多天,例如:CCD_ 1。
您可以使用以下代码:
var weekDays = SpreadsheetApp.getActive().getSheetByName('YOUR SHEET')
.getRange('YOUR_WEEKDAY_RANGE').getValue();
var days = weekDays.split(',').map(function(i) { return CalendarApp.Weekday[i]; });
CalendarApp.newRecurrence().addWeeklyRule()
.onlyOnWeekdays(days);
一般的想法是CalendarApp.Weekday
是一个常规的Javascript/GAS对象,因此您可以使用.
运算符或[]
运算符来访问其属性。