This shows you the differences between two versions of the page.
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> | ||
+ | |||
+ | 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 : " | ||
+ | //the id of the calendar we will create events on | ||
+ | calendarId : " | ||
+ | //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: | ||
+ | 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 = {}; | ||
+ | // | ||
+ | for (var i = 0, x = itemResponses.length; | ||
+ | //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; | ||
+ | } | ||
+ | | ||
+ | //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, | ||
+ | } 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, | ||
+ | } | ||
+ | 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. |