moodLearning Wiki

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
google-form-to-calendar-sync [2018/01/26 01:03]
serbizadmin created
google-form-to-calendar-sync [2020/06/13 15:10] (current)
Line 1: Line 1:
 ====== Google Form-to-Calendar Sync ====== ====== Google Form-to-Calendar Sync ======
  
 +Go to form.google.com
 +
 +Create a form with these questions:
 +  * Event Title
 +  *  Event Start Date and Time
 +  *  Event End Date and Time
 +  *  Event Location
 +  *  Event Description
 +  *  Add Guest
 +
 +
 +Once done, go to Responses then click "View responses in sheets"
 +
 +Rename title of the sheets
 +
 +Go to tool>Script Editor
 +
 +Resources > Libraries
 +
 +Include moment.js
 +
 +Here's the key: MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48
 +
 +Type this code.
 +===== Code =====
 +
 +   var moment = Moment.load();
 +   var GLOBAL = {
 +  //the id of the form we will use to create calendar events 
 +  formId : "14WoTH-2Uq3tpqPpd2Z19S7OQjOyurri7GaVPsKZRg3w",  
 +  //the id of the calendar we will create events on
 +  calendarId : "[email protected]",
 +  //a mapping of form item titles to sections of the calendar event
 +  formMap : {
 +    eventTitle: "Event Title",
 +    startTime : "Event Date and Start Time",
 +    endTime: "Event End Time",
 +    description: "Event Description",
 +    location: "Event Location",
 +    email: "Add Guests",
 +    
 +   },
 +   }
 +  function onFormSubmit() {
 +  var eventObject = getFormResponse();
 +  var event = createCalendarEvent(eventObject);
 +  }
 +  function getFormResponse() {
 +  // Get a form object by opening the form using the
 +  // form id stored in the GLOBAL variable object
 +  var form = FormApp.openById(GLOBAL.formId),
 +      //Get all responses from the form. 
 +      //This method returns an array of form responses
 +      responses = form.getResponses(),
 +      //find the length of the responses array
 +      length = responses.length,
 +      //find the index of the most recent form response
 +      //since arrays are zero indexed, the last response 
 +      //is the total number of responses minus one
 +      lastResponse = responses[length-1],
 +      //get an array of responses to every question item 
 +      //within the form for which the respondent provided an answer
 +      itemResponses = lastResponse.getItemResponses(),
 +      //create an empty object to store data from the last 
 +      //form response
 +      //that will be used to create a calendar event
 +      eventObject = {};
 +     //Loop through each item response in the item response array
 +     for (var i = 0, x = itemResponses.length; i<x; i++) {
 +     //Get the title of the form item being iterated on
 +     var thisItem = itemResponses[i].getItem().getTitle(),
 +        //get the submitted response to the form item being
 +        //iterated on
 +        thisResponse = itemResponses[i].getResponse();
 +    //based on the form question title, map the response of the 
 +    //item being iterated on into our eventObject variable
 +    //use the GLOBAL variable formMap sub object to match 
 +    //form question titles to property keys in the event object
 +    switch (thisItem) {
 +      case GLOBAL.formMap.eventTitle:
 +        eventObject.title = thisResponse;
 +        break;
 +      case GLOBAL.formMap.startTime:
 +        eventObject.startTime = thisResponse;
 +        break;
 +      case GLOBAL.formMap.endTime:
 +        eventObject.endTime = thisResponse;
 +        break; 
 +      case GLOBAL.formMap.description:
 +        eventObject.description = thisResponse;
 +        break;
 +      case GLOBAL.formMap.location:
 +        eventObject.location = thisResponse;
 +        break;
 +      case GLOBAL.formMap.email:
 +        eventObject.email = thisResponse;
 +        break;
 +      }
 +    }
 +  debugger;
 +  return eventObject;
 +  }
 +   function createCalendarEvent(eventObject) {
 +  //Get a calendar object by opening the calendar using the
 +  //calendar id stored in the GLOBAL variable object
 +  var calendar = CalendarApp.getCalendarById(GLOBAL.calendarId),
 +      //The title for the event that will be created
 +      title = eventObject.title,
 +      //The start time and date of the event that will be created
 +      startTime = moment(eventObject.startTime).toDate(),
 +      //The end time and date of the event that will be created
 +      endTime = moment(eventObject.endTime).toDate();
 +    //an options object containing the description and guest list
 +    //for the event that will be created
 +    var options = {
 +    description : eventObject.description,
 +    guests : eventObject.email,
 +    location: eventObject.location,
 +    };
 +  try {
 +    //create a calendar event with given title, start time,
 +    //end time, and description and guests stored in an 
 +    //options argument
 +    var event = calendar.createEvent(title, startTime, endTime, options)
 +    } catch (e) {
 +      //delete the guest property from the options variable, 
 +      //as an invalid email address with cause this method to 
 +      //throw an error.
 +      delete options.guests
 +      //create the event without including the guest
 +      var event = calendar.createEvent(title, startTime, endTime, options)
 +      }
 +    return event;   
 +  }
 +
 +For formId, copy the code in form url
 +
 +For the calendarId, create a new calendar then go to Settings > Interate Calendar, you will see the Calendar ID there.