Скрипт Google Apps, распространение списка, разделенного запятыми, из списка форм Google .onlyOnWeekdays () как вызовы переменных

У меня есть форма, которая создает дни недели, в которые может произойти событие (пн, вт, ср и т. Д.) - вывод дает дни недели, разделенные запятыми в одной ячейке в электронной таблице.

Затем я вызвал эту ячейку в сценарий приложений. Что мне нужно сделать, так это поместить содержимое списка в .onlyOnWeekdays, чтобы создаваемая запись календаря Google появлялась только в соответствующие дни недели.

Каждый раз, когда я пытаюсь добавить список удаленно, я получаю сообщение Cannot convert Array to Weekday [].

Вот код

    function Export_Techs_to_Calendar() 
{
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 500;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 24);
  var data = dataRange.getValues();
  var cal = CalendarApp.getCalendarsByName("- Performance Venue Staffing")[0];
  var startDateAndTime = 'Sat Aug 01 2016 00:00:00 GMT+0100 (BST)';
  var endDateAndTime = 'Wed Aug 31 2017 23:59:59 GMT+0100 (BST)';
  var events = cal.getEvents(new Date(startDateAndTime), new Date(endDateAndTime));
  var mon = CalendarApp.Weekday.MONDAY;
  var tue = CalendarApp.Weekday.TUESDAY;
  var wed = CalendarApp.Weekday.WEDNESDAY;
  var thur = CalendarApp.Weekday.THURSDAY;
  var fri = CalendarApp.Weekday.FRIDAY;
  var sat = CalendarApp.Weekday.SATURDAY;
  var sun = CalendarApp.Weekday.SUNDAY;

  //Delete Calendar Events
  for (var i=0; i<events.length ;i++){
      events[i].deleteEvent();
  Utilities.sleep(200);   
  }


  //Export Calendar Events day

  for (i in data) {
    var row = data[i];
    var sDate = row[2]; 
    var fDate = row[4];
    var nDays = ((fDate - sDate)/(1000*60*60*24)); 
    var days = row[22];
    var repeat = CalendarApp.newRecurrence().addWeeklyRule().onlyOnWeekdays([days]).until(new Date(fDate));
    var title = row[10]+" - "+row[6];
    var cancel = row[19];
    var des = "Description: "+row[7]+"\n"+"Organiser: "+row[8]+"\n"+"Course: "+row[9]+"\n"+"Number of Staff: "+row[11]+"\n"+"Staff Assigned: "+row[13];

    if (title == ""){
      title = 0};
    {};
    var loc = row[10];
    var gue = row[8]+", "+row[12];
    if (gue == "-"){gue = ""};


    //multi-day event

    if (((typeof title == 'string') && (sDate != "") && (cancel == "") && (nDays > 1))){ 
    try{
    cal.createAllDayEventSeries(title, new Date(sDate), repeat, {location:loc, description:des, guests:gue, sendInvites:true});
        Utilities.sleep(200);
    }
    catch (e) { 
    cal.createAllDayEventSeries(title, new Date(sDate), repeat, {location:loc, description:des});
      Utilities.sleep(200);
    };

    };    
    {};

  }  

Любая помощь будет принята с благодарностью.


person Bryan Wallbridge    schedule 12.07.2016    source источник


Ответы (1)


В вашем коде:

var days = row[22]; 

будет возвращать одну строку

"mon,tue,wed"

Вам нужно будет разбить строку на массив отдельных значений:

var days = row[22];
var daysArray = days.split(",");

Что даст вам

["mon", "tue", "wed"]

Теперь daysArray может быть достаточно для передачи в качестве аргумента в ваш .onlyOnWeekdays() метод.

Если это не так, вам нужно будет «построить» аргумент, перебирая daysArray в цикле и вставляя значения синтаксиса CalendarApp.Weekday.WEEKDAY в массив и используя его вместо этого.

ИЗМЕНИТЬ

Для этого я бы использовал объект:

var weekdaySyntax = {
   mon : "CalendarApp.Weekday.MONDAY",
   tue : "CalendarApp.Weekday.TUESDAY",
   wed : "CalendarApp.Weekday.WEDNESDAY",
   thu : "CalendarApp.Weekday.THURSDAY",
   fri : "CalendarApp.Weekday.FRIDAY",
}

var output = [];

//assumes daysArray = ["mon", tue", "wed"];
for (i in daysArray) {
  var day = daysArray[i];
  output.push(weekdaySyntax[day]);
};

console.log(output);//Should return ["CalendarApp.Weekday.MONDAY", "CalendarApp.Weekday.TUESDAY", "CalendarApp.Weekday.WEDNESDAY"]

Все это предполагает, что daysArray содержит такие значения, как ["пн", "вт", "ср"]? Вы явно не указали, с какими значениями вы работаете, поэтому при необходимости измените их :)

Дополнительная проблема заключается в том, что метод CalendarApp.newRecurrence().addWeeklyRule().onlyOnWeekdays(), вероятно, не принимает массив строк в качестве аргумента? Дай мне знать, как у тебя дела :)

person Sam Scholefield    schedule 12.07.2016
comment
Ни то, ни другое не сработало. Я пробовал следующий код для создания массива `var output = []; for (я в daysArray) {var day = daysArray [я]; daysOutput = CalendarApp.Weekday. + день; output.push (daysOutput); }; ` - person Bryan Wallbridge; 13.07.2016