我有一个脚本,我们使用它来更新不止一个Google表单上的下拉选项。我不是一个开发人员,甚至不是任何亲密的东西,但是经过多年的尝试和错误,我通常可以从脚本中得到我想要的东西。
下面是我们使用的当前脚本,但我想知道是否有一种更干净的方法来编写这个脚本,它不涉及大量的重复代码。我担心如果我们继续添加更多的文件来更新,将需要更多的资源和时间来运行。
谢谢你的建议!
PS,这是一个工作脚本,我已经将Form_ID更改为泛型名称。
const GOOGLE_SHEET_NAME = "FormData";
const GOOGLE_FORM_ID = "Google Form ID";
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 !!");
};
{
const GOOGLE_SHEET_NAME = "FormData";
const GOOGLE_FORM_ID = "Google Form ID2";
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 !!");
}```
发布于 2022-01-20 17:49:52
function myfunk() {
const GOOGLE_SHEET_NAME = "FormData";
const ss = SpreadsheetApp.getActiveSpreadsheet();
['id1', 'id2'].forEach(GOOGLE_FORM_ID => {
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 Forms Updated !!");
}
https://stackoverflow.com/questions/70789605
复制相似问题