Обновите выпадающие параметры в активной форме Google с помощью скрипта Apps - PullRequest
0 голосов
/ 09 марта 2020

Я довольно новичок в скрипте приложения Google и у меня возникла проблема с моим кодом.

Я использую следующий код для обновления сущностей компании до выпадающего списка формы Google. Раскрывающийся список используется в нескольких разделах формы (так как вы можете заполнить его для нескольких объектов).

Обновление работает нормально, но обновляет только первый раздел, в котором используется раскрывающийся список, в результате чего приходится удалять другие, дублируя обновленный раскрывающийся список.

Возможно ли автоматическое обновление всех разделов ??

Пожалуйста, помогите!

var ssID = "[SheetID]";
var formID = "[SheetID]";
var ssPlanningID = "[SheetID]";

var wsData = SpreadsheetApp.openById(ssPlanningID).getSheetByName("[SheetNAME]");
var form = FormApp.openById(formID);


function Dropdown() {
  var title = "Entity name";
  var values = wsData.getRange(4, 1, wsData.getLastRow()-1,1).getValues().map(function(o){ return o[0] }).filter(function(o){return o !== "" });

  var items = form.getItems();
  var titles = items.map(function(item){
    return item.getTitle();
  });

  var values = values.sort();
  var pos = titles.indexOf(title);
  var item = items[pos];
  var itemID = item.getId();

  updateDropdown(itemID,values);
}


function updateDropdown(id,values) {

  var item = form.getItemById(id);
  item.asListItem().setChoiceValues(values);
}

//DROPDOWN VAN ENTITY NAME UPDATE


function DropdownEntityName() {
  var title = "Entity name";
  var values = wsData.getRange(3, 1, wsData.getLastRow()-1,1).getValues().map(function(o){ return o[0] }).filter(function(o){return o !== "" }); 

  Logger.log(values);
  var newdata = new Array();
  for(nn in values){
    var duplicate = false;
    for(j in newdata){
      if(values[nn] == newdata[j]){
        duplicate = true;
      }
    }
    if(!duplicate){
      newdata.push([values[nn]]);
    }
  }
  Logger.log(newdata);
  var newdata = newdata.sort();
//  newdata.sort(function(x,y){
//  var xp = Number(x[0]);// ensure you get numbers
//  var yp = Number(y[0]);
//  return xp == yp ? 0 : xp < yp ? -1 : 1;// sort on numeric ascending
//});
  Logger.log(newdata);
 //sh.getRange(1,5,newdata.length,newdata[0].length).setValues(newdata);// paste new values sorted in column of your choice (here column 5, indexed from 1, we are on a sheet))


  var items = form.getItems();
  var titles = items.map(function(item){
    return item.getTitle();
  });

  var pos = titles.indexOf(title);
  var item = items[pos];
  var itemID = item.getId();

  updateDropdownEN(itemID,newdata);
}


function updateDropdownEN(id,values) {

  var item = form.getItemById(id);
  item.asListItem().setChoiceValues(values);
}
...