0

Ich habe ein Formular, das die Wochentage erstellt, an denen ein Ereignis auftreten kann (Mon, Di, Mi, etc) - die Ausgabe gibt die Wochentage, Komma getrennt in einer Zelle in der Tabelle.Google Apps Script, propagate Komma getrennte Liste von Google Formulare Liste .onlyOnWeekdays() als Variablenaufrufe

Ich habe dann diese Zelle zu einem apps-Skript aufgerufen. Was ich tun muss, ist den Inhalt der Liste in .onlyOnWeekdays zu setzen, damit der Google Kalendereintrag, der erstellt wird, nur an den entsprechenden Wochentagen erscheint.

Jedes Mal, wenn ich versuche, eine Liste remote zu setzen, kann Array nicht in Wochentag konvertiert werden [].

Hier ist der Code

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

    };  
    {}; 

    } 

Jede Hilfe wäre sehr geschätzt.

Antwort

0

In Ihrem Code:

var days = row[22]; 

wird eine einzelne Zeichenfolge zurückkehren

"mon,tue,wed" 

Sie müssen die Zeichenfolge in ein Array von einzelnen Werte teilen:

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

Welche Geben Sie

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

Jetzt kann daysArray genug sein, um als Argument in Ihrer .onlyOnWeekdays() Methode übergeben.

Wenn dies nicht der Fall ist, müssen Sie das Argument "erstellen", indem Sie daysArray durchlaufen und die CalendarApp.Weekday.WEEKDAY Syntaxwerte in ein Array schieben und stattdessen verwenden.

EDIT

dies für ich ein Objekt verwenden würde:

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"] 

Dies alles setzt voraus, dass daysArray Werte wie enthält [ "mon", "Di", "verheiratet"]? Sie haben nicht explizit gezeigt, mit welchen Werten Sie tatsächlich arbeiten, passen Sie sie also an :)

Zusätzliches Problem ist, dass die CalendarApp.newRecurrence().addWeeklyRule().onlyOnWeekdays() Methode wahrscheinlich kein Array von Strings als Argument akzeptiert? Lass mich wissen, wie du weiterkommst :)

+0

Weder funktioniert. Ich habe Folgendes für Code versucht, um das Array zu erstellen ' var output = []; für (i in TagenArray) { var day = TageArray [i]; TageOutput = "CalendarApp.Weekday." + Tag; output.push (TageOutput); }; ' –

Verwandte Themen