Last active
December 30, 2021 12:50
-
-
Save barrieroberts/0005b9f76d92bec8d4d599911a3d0956 to your computer and use it in GitHub Desktop.
13-Adding different types of questions to a Google Form
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //Create new form - Global variable so it can be seen by all functions | |
| const FORM = FormApp.create("Questionnaire"); | |
| function makeQuestionnaire() { | |
| //Get data and last row from spreadsheet | |
| const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); | |
| const data = sh.getDataRange().getValues(); | |
| //Loop through each question and check what question type it is | |
| data.forEach(checkQuestionType) | |
| } | |
| //function to check question type | |
| function checkQuestionType(rowData) { | |
| let qType = rowData[1]; | |
| if (qType === "text") { | |
| makeTextQ(rowData); | |
| } | |
| else if (qType === "date") { | |
| makeDateQ(rowData); | |
| } | |
| else if (qType === "duration") { | |
| makeDurationQ(rowData); | |
| } | |
| else if (qType === "multiplec") { | |
| makeMultipleCQ(rowData); | |
| } | |
| else if (qType === "list") { | |
| makeListQ(rowData); | |
| } | |
| else if (qType === "scale") { | |
| makeScaleQ(rowData); | |
| } | |
| else if (qType === "checkbox") { | |
| makeCheckboxQ(rowData); | |
| } | |
| else if (qType === "grid") { | |
| makeGridQ(rowData); | |
| } | |
| else if (qType === "paragraph") { | |
| makeParagraphQ(rowData); | |
| } | |
| } | |
| ////Functions to make different types of questions | |
| //Make text question | |
| function makeTextQ(rowData) { | |
| let text = rowData[2]; | |
| let item = FORM.addTextItem(); | |
| item.setTitle(text); | |
| } | |
| //Make date question | |
| function makeDateQ(rowData) { | |
| let date = rowData[2]; | |
| let item = FORM.addDateItem(); | |
| item.setTitle(date); | |
| item.setRequired(true); | |
| } | |
| //make duration question | |
| function makeDurationQ(rowData) { | |
| let duration = rowData[2]; | |
| let item = FORM.addDurationItem(); | |
| item.setTitle(duration); | |
| } | |
| //make Multiple-Choice question | |
| function makeMultipleCQ(rowData) { | |
| let mcQuestion = rowData[2]; | |
| let item = FORM.addMultipleChoiceItem(); | |
| item.setTitle(mcQuestion); | |
| //Getting options | |
| let trimmedData = rowData.filter((str) => { | |
| return /\S/.test(str); | |
| }); | |
| //Getting options without spaces | |
| let slicedData = trimmedData.slice(3, trimmedData.length); | |
| //Adding option to form | |
| item.setChoiceValues(slicedData); | |
| } | |
| //make List question | |
| function makeListQ(rowData) { | |
| let listQuestion = rowData[2]; | |
| let item = FORM.addListItem(); | |
| item.setTitle(listQuestion); | |
| let trimmedData = rowData.filter((str) => { | |
| return /\S/.test(str); | |
| }); | |
| let slicedData = trimmedData.slice(3, trimmedData.length); | |
| item.setChoiceValues(slicedData); | |
| } | |
| //make Scale question | |
| function makeScaleQ(rowData) { | |
| let scaleQ = rowData[2]; | |
| let item = FORM.addScaleItem(); | |
| item.setTitle(scaleQ); | |
| let trimmedData = rowData.filter((str) => { | |
| return /\S/.test(str); | |
| }); | |
| //Get and set lower and upper bounds of scale | |
| let lower = trimmedData.slice(3, 4); | |
| let upper = trimmedData.slice(4, 5); | |
| item.setBounds(lower, upper); | |
| //Set labels to lower and upper bounds | |
| item.setLabels(trimmedData.slice(5, 6), trimmedData.slice(6, 7)); | |
| } | |
| //make Checkbox question | |
| function makeCheckboxQ(rowData) { | |
| let checkboxQ = rowData[2]; | |
| let item = FORM.addCheckboxItem(); | |
| item.setTitle(checkboxQ); | |
| let trimmedData = rowData.filter((str) => { | |
| return /\S/.test(str); | |
| }); | |
| let slicedData = trimmedData.slice(3, trimmedData.length); | |
| item.setChoiceValues(slicedData); | |
| } | |
| //make Grid question | |
| function makeGridQ(rowData) { | |
| let gridQ = rowData[2]; | |
| let item = FORM.addGridItem(); | |
| item.setTitle(gridQ); | |
| let trimmedData = rowData.filter((str) => { | |
| return /\S/.test(str); | |
| }); | |
| //Find where "Columns:" text is in array | |
| let columnPosition = trimmedData.indexOf("Columns:"); | |
| //Get row values for grid | |
| let slicedDataRows = trimmedData.slice(3, columnPosition); | |
| //Get column values for grid | |
| let slicedDataColumns = trimmedData.slice(columnPosition + 1, trimmedData.length); | |
| item.setRows(slicedDataRows); | |
| item.setColumns(slicedDataColumns); | |
| } | |
| //make Paragraph question | |
| function makeParagraphQ(rowData) { | |
| let paragraphText = rowData[2]; | |
| let item = FORM.addParagraphTextItem(); | |
| item.setTitle(paragraphText); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment