通过函数传递多个sheet ID

问题描述 投票:0回答:1

对编码非常陌生。 下面的代码可以工作,但速度很慢 - 希望你能帮助我加快速度。

我有一张 Google 工作表,带有“数据”选项卡,我用它来填充我所有其他 Google 表单下拉菜单。

但是,我正在设置越来越多的需要此信息的表单,因此加快速度会很棒。 (下一步是能够将此代码设置为在“打开”表单上运行)

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);
  
}
google-apps-script google-sheets google-forms
1个回答
0
投票

由于您使用相同的数据填充所有表单,因此您可以通过仅检索一次数据并删除所有重复的函数和请求来优化代码

重要:

  • 避免不必要地频繁调用 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);
      }
    });
  })
}

© www.soinside.com 2019 - 2024. All rights reserved.