/** * @license MIT * * © 2019-2020 xfanatical.com. All Rights Reserved. * * @since 1.1.2 interface fix * @since 1.1.1 Optimize performance (continued) * @since 1.1.0 Optimize performance * @since 1.0.0 Add all edit response urls and update new urls for new submissions */ function registerNewEditResponseURLTrigger() { // check if an existing trigger is set var existingTriggerId = PropertiesService.getUserProperties().getProperty('onFormSubmitTriggerID') if (existingTriggerId) { var foundExistingTrigger = false ScriptApp.getProjectTriggers().forEach(function (trigger) { if (trigger.getUniqueId() === existingTriggerId) { foundExistingTrigger = true } }) if (foundExistingTrigger) { return } } var trigger = ScriptApp.newTrigger('onFormSubmitEvent') .forSpreadsheet(SpreadsheetApp.getActive()) .onFormSubmit() .create() PropertiesService.getUserProperties().setProperty('onFormSubmitTriggerID', trigger.getUniqueId()) } function getTimestampColumn(sheet) { for (var i = 1; i <= sheet.getLastColumn(); i += 1) { if (sheet.getRange(1, i).getValue() === 'Timestamp') { return i } } return 1 } function getFormResponseEditUrlColumn(sheet) { var form = FormApp.openByUrl(sheet.getFormUrl()) for (var i = 1; i <= sheet.getLastColumn(); i += 1) { if (sheet.getRange(1, i).getValue() === 'Form Response Edit URL') { return i } } // get the last column at which the url can be placed. return Math.max(sheet.getLastColumn() + 1, form.getItems().length + 2) } /** * params: { sheet, form, formResponse, row } */ function addEditResponseURLToSheet(params) { if (!params.col) { params.col = getFormResponseEditUrlColumn(params.sheet) } var formResponseEditUrlRange = params.sheet.getRange(params.row, params.col) formResponseEditUrlRange.setValue(params.formResponse.getEditResponseUrl()) } function onOpen() { var menu = [{ name: 'Add Form Edit Response URLs', functionName: 'setupFormEditResponseURLs' }] SpreadsheetApp.getActive().addMenu('Forms', menu) } function setupFormEditResponseURLs() { var sheet = SpreadsheetApp.getActiveSheet() var spreadsheet = SpreadsheetApp.getActive() var formURL = sheet.getFormUrl() if (!formURL) { SpreadsheetApp.getUi().alert('No Google Form associated with this sheet. Please connect it from your Form.') return } var form = FormApp.openByUrl(formURL) // setup the header if not existed var headerFormEditResponse = sheet.getRange(1, getFormResponseEditUrlColumn(sheet)) var title = headerFormEditResponse.getValue() if (!title) { headerFormEditResponse.setValue('Form Response Edit URL') } var timestampColumn = getTimestampColumn(sheet) var editResponseUrlColumn = getFormResponseEditUrlColumn(sheet) var timestampRange = sheet.getRange(2, timestampColumn, sheet.getLastRow() - 1, 1) var editResponseUrlRange = sheet.getRange(2, editResponseUrlColumn, sheet.getLastRow() - 1, 1) if (editResponseUrlRange) { var editResponseUrlValues = editResponseUrlRange.getValues() var timestampValues = timestampRange.getValues() for (var i = 0; i < editResponseUrlValues.length; i += 1) { var editResponseUrlValue = editResponseUrlValues[i][0] var timestampValue = timestampValues[i][0] if (editResponseUrlValue === '') { var timestamp = new Date(timestampValue) if (timestamp) { var formResponse = form.getResponses(timestamp)[0] editResponseUrlValues[i][0] = formResponse.getEditResponseUrl() var row = i + 2 if (row % 10 === 0) { spreadsheet.toast('processing rows ' + row + ' to ' + (row + 10)) editResponseUrlRange.setValues(editResponseUrlValues) SpreadsheetApp.flush() } } } } editResponseUrlRange.setValues(editResponseUrlValues) SpreadsheetApp.flush() } registerNewEditResponseURLTrigger() SpreadsheetApp.getUi().alert('You are all set! Please check the Form Response Edit URL column in this sheet. Future responses will automatically sync the form response edit url.') } function onFormSubmitEvent(e) { var sheet = e.range.getSheet() var form = FormApp.openByUrl(sheet.getFormUrl()) var formResponse = form.getResponses().pop() addEditResponseURLToSheet({ sheet: sheet, form: form, formResponse: formResponse, row: e.range.getRow(), }) }
Ref :
https://xfanatical.com/blog/how-to-edit-google-forms-responses-in-the-spreadsheet/
Isian Drop Down dari Google Sheet
/**
* Auto-populate Question options in Google Forms
* from values in Google Spreadsheet
*
* Written by Amit Agarwal (MIT License)
*
**/
const populateGoogleForms = () => {
const GOOGLE_SHEET_NAME = "NAMA SHEET ANDA";
const GOOGLE_FORM_ID = "ID GOOGLE FORM";
const ss = SpreadsheetApp.getActiveSpreadsheet();
const [header, ...data] = ss
.getSheetByName(GOOGLE_SHEET_NAME)
.getDataRange()
.getDisplayValues();
const choices = {};
header.forEach((title, i) => {
choices[title] = data.map((d) => d[i]).filter((e) => e);
});
FormApp.openById(GOOGLE_FORM_ID)
.getItems()
.map((item) => ({
item,
values: choices[item.getTitle()],
}))
.filter(({ values }) => values)
.forEach(({ item, values }) => {
switch (item.getType()) {
case FormApp.ItemType.CHECKBOX:
item.asCheckboxItem().setChoiceValues(values);
break;
case FormApp.ItemType.LIST:
item.asListItem().setChoiceValues(values);
break;
case FormApp.ItemType.MULTIPLE_CHOICE:
item.asMultipleChoiceItem().setChoiceValues(values);
break;
default:
// ignore item
}
});
ss.toast("Google Form Updated !!");
};
Referensi :
No comments:
Post a Comment