This shows you the differences between two versions of the page.
google-form-to-calendar-sync [2018/01/26 02:23] ktiamzon [Headline] |
google-form-to-calendar-sync [2020/06/13 15:10] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== 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. | ||
- | ====== Headline ====== | ||
- | 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. |