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. | ||