#google-apps-script #google-sheets #google-forms
#google-apps-script #google-sheets #google-forms
Вопрос:
Очень новичок в кодировании. Приведенный ниже код работает, но работает медленно — надеюсь, вы поможете мне ускорить его.
У меня есть один лист Google с вкладкой «Данные», который я использую для заполнения всех других выпадающих меню Google form.
Однако я настраиваю все больше и больше форм, которым требуется эта информация, поэтому было бы здорово ускорить это. (Следующим шагом будет возможность настроить этот код для запуска в форме «Открыть»)
»’
function two() {
main();
main2();
main3();
}
var ssID = "1cx5I5_JABvS5bi0R7fM9tiRp_XXa28EvuCQm0I7lNSI";
var formID = "1jIhQ7rdJ2u_BKR9Fsj_-k9eX1ngUvRtyigFlSNqrMT0"; // Old Ordering system https://docs.google.com/forms/d/1jIhQ7rdJ2u_BKR9Fsj_-k9eX1ngUvRtyigFlSNqrMT0/edit
var formID2 = "1GsqBYMCKQKFpg0qmfZmRDdC6TNR6Q-sWzwokeNbdm44"; // Labour broking https://docs.google.com/forms/d/1GsqBYMCKQKFpg0qmfZmRDdC6TNR6Q-sWzwokeNbdm44/edit
var formID3 = "1XvGLV0PzOYfG9ryvNKxI9Nwi62NjeZ4BCFlBNG1PS0Y"; //Site planing https://docs.google.com/forms/d/1XvGLV0PzOYfG9ryvNKxI9Nwi62NjeZ4BCFlBNG1PS0Y/edit
var wsData = SpreadsheetApp.openById(ssID).getSheetByName("data");
var form = FormApp.openById(formID);
var form2 = FormApp.openById(formID2);
var form3 = FormApp.openById(formID3);
//BELOW IS HOW WE STARTED WORKING OUT HOW TO GET THE INFO WE NEEDED
//function myFunction() {
//var item = form.getItemById(831533065);
//var values = ["Nic","Tobie"];
//item.asListItem().setChoiceValues(values);
//var items = form.getItems();
//Logger.log(items[0].getId().toString());
//}
function main(){
var labels = wsData.getRange(1, 1,1,wsData.getLastColumn()).getValues()[0];
labels.forEach(function(label,i){
//Logger.log(label);
var options = wsData
.getRange(2, i 1,wsData.getLastRow()-1,1)
.getValues()
.map(function(o){ return o[0] })
.filter(function(o){ return o !== ""});
//Logger.log(options);
updateDropdownUsingTitle(label,options);
});
}
function updateDropdownUsingTitle(title,values) {
//var title = "Name of person completing this form";
//var values = ["r","f","p"];
var items = form.getItems();
var titles = items.map(function(item){
return item.getTitle()
});
var pos = titles.indexOf(title);
if(pos !== -1){
var item = items[pos];
var itemID = item.getId();
updteDropdown(itemID,values);
}
}
function updteDropdown(id,values) {
var item = form.getItemById(id);
item.asListItem().setChoiceValues(values);
}
function main2(){
var labels2 = wsData.getRange(1, 1,1,wsData.getLastColumn()).getValues()[0];
labels2.forEach(function(label2,i){
//Logger.log(label);
var options2 = wsData
.getRange(2, i 1,wsData.getLastRow()-1,1)
.getValues()
.map(function(o){ return o[0] })
.filter(function(o){ return o !== ""});
//Logger.log(options);
updateDropdownUsingTitle2(label2,options2);
});
}
function updateDropdownUsingTitle2(title2,values2) {
//var title = "Name of person completing this form";
//var values = ["r","f","p"];
var items2 = form2.getItems();
var titles2 = items2.map(function(item){
return item.getTitle()
});
var pos = titles2.indexOf(title2);
if(pos !== -1){
var item2 = items2[pos];
var itemID2 = item2.getId();
updteDropdown2(itemID2,values2);
}
}
function updteDropdown2(id,values2) {
var item2 = form2.getItemById(id);
item2.asListItem().setChoiceValues(values2);
}
function main3(){
var labels3 = wsData.getRange(1, 1,1,wsData.getLastColumn()).getValues()[0];
labels3.forEach(function(label3,i){
//Logger.log(label);
var options3 = wsData
.getRange(2, i 1,wsData.getLastRow()-1,1)
.getValues()
.map(function(o){ return o[0] })
.filter(function(o){ return o !== ""});
//Logger.log(options);
updateDropdownUsingTitle3(label3,options3);
});
}
function updateDropdownUsingTitle3(title3,values3) {
//var title = "Name of person completing this form";
//var values = ["r","f","p"];
var items3 = form3.getItems();
var titles3 = items3.map(function(item){
return item.getTitle()
});
var pos = titles3.indexOf(title3);
if(pos !== -1){
var item3 = items3[pos];
var itemID3 = item3.getId();
updteDropdown3(itemID3,values3);
}
}
function updteDropdown3(id,values3) {
var item3 = form3.getItemById(id);
item3.asListItem().setChoiceValues(values3);
}
»’
Ответ №1:
Поскольку вы заполняете все формы одними и теми же данными, вы можете оптимизировать свой код, извлекая данные только один раз и удаляя все повторяющиеся функции и запросы
Важно:
- Избегайте выполнения вызовов SpreadsheetApp чаще, чем необходимо, поскольку это замедлит ваш код — см. Рекомендации
Пример:
var ssID = "1cx5I5_JABvS5bi0R7fM9tiRp_XXa28EvuCQm0I7lNSI";
var formID = "1jIhQ7rdJ2u_BKR9Fsj_-k9eX1ngUvRtyigFlSNqrMT0"; // Old Ordering system https://docs.google.com/forms/d/1jIhQ7rdJ2u_BKR9Fsj_-k9eX1ngUvRtyigFlSNqrMT0/edit
var formID2 = "1GsqBYMCKQKFpg0qmfZmRDdC6TNR6Q-sWzwokeNbdm44"; // Labour broking https://docs.google.com/forms/d/1GsqBYMCKQKFpg0qmfZmRDdC6TNR6Q-sWzwokeNbdm44/edit
var formID3 = "1XvGLV0PzOYfG9ryvNKxI9Nwi62NjeZ4BCFlBNG1PS0Y"; //Site planing https://docs.google.com/forms/d/1XvGLV0PzOYfG9ryvNKxI9Nwi62NjeZ4BCFlBNG1PS0Y/edit
var wsData = SpreadsheetApp.openById(ssID).getSheetByName("data");
var form1 = FormApp.openById(formID);
var form2 = FormApp.openById(formID2);
var form3 = FormApp.openById(formID3);
var formArray = [form1, form2, form3];
function main(){
var labels = wsData.getRange(1, 1,1,wsData.getLastColumn()).getValues()[0];
var values = wsData.getRange(2, 1, wsData.getLastRow()-1,wsData.getLastColumn()).getValues();
formArray.forEach(function(form){
var items = form.getItems();
var titles = items.map(function(item){
return item.getTitle()
});
labels.forEach(function(label,i){
//Logger.log(label);
var options = values.map(function(row){return row[i]})
.filter(function(o){ return o !== ""});
//Logger.log(options);
var pos = titles.indexOf(label);
if(pos !== -1){
var item = items[pos];
var itemID = item.getId();
item.asListItem().setChoiceValues(options);
}
});
})
}