I want to read the Google form question choices (pull-down expressions) from the spreadsheet, so I create them in the script editor as follows:
The second question can be reflected, but the third question cannot be reflected.
The third question is in a different section, and I am at a loss because I do not know how to rewrite the code.Please let me know if anyone knows.
Thank you for your cooperation.
function updateForm(){
// Obtain ID from URL of Google form
// Something like this: "xxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxx"
varformId="xxxxxxxxx-xxxxxxxxx-xxxxxxx"
constformFile=FormApp.openById(formId);
variables = formFile.getItems();
varsId="xxxxxxxxxx-xxxxxxxxxxxxxxxxxxx"; // Specify ID for spreadsheet
varsName="category";// Specify sheet name for spreadsheet
varsheet=SpreadsheetApp.openById(ssId).getSheetByName(ssName);
// Get the bottom line number on the sheet
var last_row =sheet.getLastRow();
Logger.log(sheet);
// Synchronize the first question with the contents of the spreadsheet
varitemOfService=items[0];
// 2nd row, 1st column, 1 cell retrieval
var sitelistNames=dropNullItemFromArray(sheet.getRange(2,1,last_row,1).getValues());
var sitelist=[];
for (vari=0;i<sitelistNames.length;i++) {
sitelist[i] = sitelistNames[i]
}
// Reflect the first question
itemOfService.asListItem().setChoiceValues(sitelist).setRequired(true);
// Synchronize the second question with the contents of the spreadsheet
varitemOfService=items[1];
var sitelistNames=dropNullItemFromArray(sheet.getRange(2,6, last_row,1).getValues());
var sitelist=[];
for (vari=0;i<sitelistNames.length;i++) {
sitelist[i] = sitelistNames[i]
}
// Reflect the second question
itemOfService.asListItem().setChoiceValues(sitelist).setRequired(true);
// Synchronize the third question with the contents of the spreadsheet
varitemOfService=items[2];
var sitelistNames=dropNullItemFromArray(sheet.getRange(3,3, last_row,1).getValues());
var sitelist=[];
for (vari=0;i<sitelistNames.length;i++) {
sitelist[i] = sitelistNames[i]
}
// Reflect the third question
itemOfService.asListItem().setChoiceValues(sitelist).setRequired(true);
}
// A function that eliminates empty arrays in a good way
function dropNullItemFromArray(array){
var new_array=[];
array.forEach(function(value){
if(value!=null&value!=""){
new_array.push(value);
}
});
return new_array;
}
From the Google Form you provided, I found out that you are using PAGE_BREAK.In this case, if you modify the script displayed, try modifying it as follows:
varitemOfService=items[2];
varitemOfService=items[3];
itemOfService.asListItem().setChoiceValues(sitelist).setRequired(true);
may have encountered an error.This fix will skip "PAGE_BREAK", which should avoid errors.I don't know if it will be helpful, but I thought that I might be able to modify the script as follows from the script shown and the Google Form and Google Spreadsheet you provided.I thought it would be useful to process Item objects in a loop.I hope it will be helpful.
function sample(){
Const formId = "###"; // Set Form ID.
Please set the constsId="###";// Spreadsheet ID.
// Retrieve values from spreadsheet
const sheet = SpreadsheetApp.openById(ssId).getSheetByName("sheet1");
const[,...v] = sheet.getDataRange().getValues();
// transposition
const values=v[0].map(_,c)=>v.map(r=>r[c]));
// Set the question to Google Form.At this time, PAGE_BREAK skips.
constformFile=FormApp.openById(formId);
letc = 0;
formFile.getItems().forEach(e=>{
if(e.getType()!=FormApp.ItemType.PAGE_BREAK) {//or if(e.getType()==FormApp.ItemType.LIST){
e.asListItem().setChoiceValues(values[c++]).setRequired(true);
}
});
}
© 2024 OneMinuteCode. All rights reserved.