moodLearning Wiki

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 oncalendarId : “c7o2tni40kbp29of5902j2oabs@group.calendar.google.com”,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 objectvar 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.