Функция Google Script для обновления выпадающих форм Google, заполненных значениями ячеек в Google Sheet - PullRequest
0 голосов
/ 21 апреля 2020

Следующий скрипт создаст форму с 4 разделами. В первом разделе формы перечислены три параметра (раскрывающийся список), и в зависимости от того, какой вариант вы выберете, он перейдет в соответствующий раздел, чтобы запросить дополнительную информацию об этом конкретном параметре (дополнительные раскрывающиеся списки).

Я заполняю Первый раздел с именами трех листов (sql_db_info, oracle_db_info, imanis_db_info) Я заполняю три различных зависимых подраздела, используя строки в первых двух столбцах каждого листа.

Все это работает.

Проблема в том, что мне нужно сделать, чтобы обновить различные разделы, если я изменю какие-либо значения в столбцах существующих листов или добавлю новые листы.

Если я добавлю больше листов (mongo_db_info , casandra_db_info) и связанных с ними зависимых подразделов (используя значения в новых листах), он добавляет к существующей форме (добавление дополнительных разделов).

Я пытался удалять и воссоздавать разделы каждый раз, но это винты до сбора ответов в соответствующем листе. Новые столбцы создаются и распространяются из-под контроля.

Итак ... Мне нужно иметь возможность просто обновлять соответствующие разделы, добавляя новые записи и удаляя удаленные записи, или перезаписывая выпадающие записи без воссоздания разделы.

Итак, цикл должен работать в случае, если я добавляю новые листы (новый тип базы данных с новыми зависимыми разделами), но воссоздаю форму каждый раз, когда ее не урезаем.

Итак. Дополнительные листы, добавит к дополнительному первому разделу (sql, oracle, imanis, mon go, cassandra et c). И значения ячеек в первых двух столбцах этих листов обеспечат выпадающие списки для последующих двух разделов для каждого параметра, выбранного в первом разделе (sql, oracl, imanis et c).

Как я могу обновить соответствующие раскрывающиеся списки, когда добавляю новые листы или добавляю / удаляю значения из столбцов в листах?

В приведенном ниже коде функция dbMaker работает при первом запуске.

Что мне нужно сделать, чтобы он просто обновлял выпадающие списки при последующих запусках?

var ssID = "url id is put here";
var formID = "url id is put here"
var ss = SpreadsheetApp.openById(ssID);
var form = FormApp.openById((formID));


//function clearAll(form){
// var form = FormApp.openById((formID));
//  var items=form.getItems();
//  Logger.log(items);
//  //if(items < 1 ) {
//  var d=0;//deleted items counter
//  for (var i=0; i<items.length; i++) {
//    form.deleteItem(i-d++);
//    
//  }
  //} 
//  dbMaker();
//}

function dbMaker() {

  //var message = 'The current time is ' + new Date().toString();
  //Logger.log(message);

  var sheets = ss.getSheets().filter(function(sheet) {return sheet.getName().match(/db_info/gi);});

  var dbSelect = form.addListItem().setTitle('DB Type').setRequired(true);



  var dbChoices = [];
  for(var i = 0; i < sheets.length; i++) {
    var dbName = sheets[i].getName();
    var dbSection = form.addPageBreakItem().setTitle(dbName).setGoToPage(FormApp.PageNavigationType.SUBMIT);


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    var nativetech = getnativetech(sheets[i]);
    var nativetech_Select = form.addListItem().setTitle('Native Technology' + ' Choice').setHelpText('Select the correct DB type').setRequired(true);

    var nativetech_Choices = [];

    for(var j = 0; j < nativetech.length; j++) {
      nativetech_Choices.push(nativetech_Select.createChoice(nativetech[j]));
      Logger.log('nativetech choices', nativetech[j]);
    }

    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    var integratedtech = getintegratedtech(sheets[i]);
    var integratedtech_Select = form.addListItem().setTitle('Intregrated with company' + ' Choice').setHelpText('Select the correct option').setRequired(true);

    var integratedtech_Choices = [];
    for(var k = 0; k < integratedtech.length; k++) {
      integratedtech_Choices.push(integratedtech_Select.createChoice(integratedtech[k]));
      Logger.log('integratedtech choices', integratedtech[k]);
    }

    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++    


    nativetech_Select.setChoices(nativetech_Choices).setRequired(true);
    integratedtech_Select.setChoices(integratedtech_Choices).setRequired(true)

    dbChoices.push(dbSelect.createChoice(dbName, dbSection));

  }
  dbSelect.setChoices(dbChoices).setRequired(true);
}




function getnativetech(sheet) {
  var result1 = ""
  var nativetech_Values = sheet.getDataRange().getValues();
  var result1 = nativetech_Values.reduce(function(ar, e) {
  if (e[0]) ar.push(e[0])
  return ar;
  }, []);  
  var nativetech = [];
  for(var i = 1; i < result1.length; i++) {

    Logger.log('result1',result1[i]);
    nativetech.push(nativetech_Values[i][0]);
  }
  return nativetech;
}


function getintegratedtech(sheet) {
  var result2 = ""
  var integratedtech_Values = sheet.getDataRange().getValues();
  var result2 = integratedtech_Values.reduce(function(ar, e) {
  if (e[1]) ar.push(e[1])
  return ar;
  }, []);  
  var integratedtech = [];
  for(var i = 1; i < result2.length; i++) {

    Logger.log('result2',result2[i]);
    integratedtech.push(integratedtech_Values[i][1]);
  }
  return integratedtech;
}
...