【发布时间】:2020-12-28 17:58:49
【问题描述】:
我有大量用于一个项目的 Google 表单,每个表单都有相同的部分和问题,只是选择不同。每次我想更新一个问题时,我都必须单独更改每个表格,这需要很长时间。我想知道是否有办法将表单链接到工作表,这样我就可以更改电子表格中的问题,并且它会在每个连接的表单中更新。
【问题讨论】:
标签: google-sheets google-forms
我有大量用于一个项目的 Google 表单,每个表单都有相同的部分和问题,只是选择不同。每次我想更新一个问题时,我都必须单独更改每个表格,这需要很长时间。我想知道是否有办法将表单链接到工作表,这样我就可以更改电子表格中的问题,并且它会在每个连接的表单中更新。
【问题讨论】:
标签: google-sheets google-forms
我可以建议的一个选项是在您的 Google 表格中创建一个 container-bound script,以使用 Apps 脚本更新多个 Google 表单的问题。
我们有一个 Google 表格,其中有 2 个表格,分别名为“问题”和“表格”。
Sheet:Questions 包含您的 Google 表单中可用的问题列表。 To Update 列可用作标志,以确定您要在 Google 表单中更新哪些问题。
Sheet:Forms 包含您希望在其中更新问题的 Google 表单 ID 列表。
function updateFormsQuestions() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formsSheet = ss.getSheetByName("Forms");
var questionsSheet = ss.getSheetByName("Questions");
//Get the list of forms to update
var formsList = formsSheet.getRange(2,1,formsSheet.getLastRow()-1).getValues();
Logger.log(formsList);
//Get the list of questions to update
var questionIndex = [];
var qCheckbox = questionsSheet.getRange(2,2,questionsSheet.getLastRow()-1,1).getValues();
Logger.log(qCheckbox);
qCheckbox.forEach(function(currentValue, index){
if(currentValue[0] == true)questionIndex.push(index);
});
Logger.log(questionIndex);
//Open Form and get all items
for( var i = 0; i < formsList.length; i++){
var forms = FormApp.openById(formsList[i][0]);
var items = forms.getItems();
//Update question
questionIndex.forEach(function(index){
Logger.log(index);
Logger.log(questionsSheet.getRange(index + 2, 1).getValue());
items[index].setTitle(questionsSheet.getRange(index + 2, 1).getValue());
});
}
}
它有什么作用?
Sheet:Forms 下的 Google 表单 ID 列表
Cell B2开始获取Sheet:Questions下的所有复选框值。questionIndex 数组。 (请注意,在 javascript 数组中,索引从零开始)。表单项可以作为数组访问。因此它应该从零开始。 (问题 1 = 索引 0,问题 2 = 索引 1 ……以此类推)
请注意,当获取单元格值
questionsSheet.getRange(index + 2, 1).getValue()时,我们将行索引增加 2。如果我们想访问Cell A3, row = 3; col = 1,单元格行和列从表格中的 1 开始。我们之前在第 3 步中保存的索引从零开始(因为我们使用了数组)。如果你好奇为什么我们增加 2 而不是 1。原因是因为我们在第 2 步中开始从第 2 行而不是第 1 行获取复选框值时也调整了索引。
Sheet:QuestionsC 列将显示qCheckboxarray 的索引,而 D 列将显示访问行时工作表的索引。
之前:
其他参考:
Forms Service - allows scripts to create, access and modify Google Forms
Spreadsheet Service - allows scripts to create, access, modify Google Sheets
【讨论】: