0

我想让谷歌工作表在谷歌日历上创建一个定期事件。

有没有办法让这部分代码依赖于电子表格中的变量?我希望能够在我的电子表格上选择一周中的几天,而不必输入它们。

.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());
} 
4

1 回答 1

1

这是完全可能的。为此,只需添加一行从特定单元格读取值即可。该特定单元格将包含重复日期的名称。像这样的东西:

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]));

此外,如果您想在一个单元格中呆多天,例如: MONDAY, WEDNESDAY, FRIDAY.

您可以使用以下代码:

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 对象,因此您可以使用.运算符或[]运算符访问其属性。

于 2019-11-19T15:01:39.897 回答