Google 应用脚本 - 通过函数传递多个 sheet ID
Google App Script - pass multiple sheet ID through function
对编码非常陌生。
下面的代码有效但速度很慢 - 希望你能帮助我加快速度。
我有一个 Google sheet,带有一个“数据”选项卡,我用它来填充我所有其他 Google 表单下拉菜单。
不过,我正在设置越来越多需要此信息的表单,所以加快速度会很棒。
(能够在表单 'Open' 上将此代码设置为 运行 将是下一步)
'''
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);
}
'''
由于您使用相同的数据填充所有表单,因此您可以通过仅检索一次数据并删除所有重复的函数和请求来优化代码
重要:
- 避免不必要地更频繁地执行对 SpreadsheetApp 的调用,因为这会使您的代码变慢 - 请参阅 Best Practices
样本:
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);
}
});
})
}
对编码非常陌生。 下面的代码有效但速度很慢 - 希望你能帮助我加快速度。
我有一个 Google sheet,带有一个“数据”选项卡,我用它来填充我所有其他 Google 表单下拉菜单。
不过,我正在设置越来越多需要此信息的表单,所以加快速度会很棒。 (能够在表单 'Open' 上将此代码设置为 运行 将是下一步)
'''
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);
}
'''
由于您使用相同的数据填充所有表单,因此您可以通过仅检索一次数据并删除所有重复的函数和请求来优化代码
重要:
- 避免不必要地更频繁地执行对 SpreadsheetApp 的调用,因为这会使您的代码变慢 - 请参阅 Best Practices
样本:
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);
}
});
})
}