moodLearning Wiki

This is an old revision of the document!


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.

Headline

 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.