Как задать go для разделов в вопросе Google Forms с помощью скрипта приложения - PullRequest
0 голосов
/ 02 мая 2020

У меня есть форма Google, в которой некоторые поля содержат «stati c», а некоторые заполняются приложением из листа Google, который будет запускаться ежедневно. У меня почти есть то, что я хочу, но не совсем.

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

Phill / Beacon Hill - Go to section called "Beacon Hill
Jane  / Harbord     - Go to section called "Harbord"
Fred / Beacon Hill  - Go to section called "Beacon Hill"
etc...

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

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

function populatePlayersClubsListV2() {
// ------------------------------------------------------------------------------------------------
// This gets each male player and the junior club they've been assigned to from the 
// Junior_Clubs_Training_Sessions s/sheet (which is this s/sheet). It creates a list that the player 
// chooses their name from and sets up a branch to the appropriate Club training sessions section 
// in the form depending on which club they're assigned to. .
// ------------------------------------------------------------------------------------------------  

  // Open the "Find Junior Club Training Sessions" form 
  var form = FormApp.openById("1fo33ncgJY.................iRnMsERRTen8WjTH_xrx0");

  // Identify the sheet in this spreadsheet holding the data needed to populate the drop-down. Here 
  // it's the "PlayersClubs" tab which says which club each player is assigned to.
  var ss = SpreadsheetApp.getActive();
  var playersClubsSheet = ss.getSheetByName("PlayersClubs");

  // Grab the values from the rows & columns of the sheet - use 2 to skip header row. Use getMaxRows 
  // and getMaxColumns to avoid hard-coding the number of rows and columns.
  var playersClubsSsValues = playersClubsSheet.getRange(2, 1, playersClubsSheet.getMaxRows() - 1, playersClubsSheet.getMaxColumns() - 1).getValues();

  // We need to loop thro twice - once to populate the male players, and again for the female players.
  // Males/females populate different fields and we hold the data-item-IDs of those fields in an array.
  var formFieldsArray = [
                         ["Male", 1397567108],
                         ["Female", 1441402031]
                        ];

  for(var h = 0; h < formFieldsArray.length; h++) {

    // Open the form field you want to populate - it must be a dropdown or multiple choice.
    // Right-click field, inspect and look for data-item-ID followed by a number.
    var playersClubsFormList = form.getItemById(formFieldsArray[h][1]).asListItem();

    // Define array to hold values coming from the s/sheet and used to populate form fields.
    var playersClubsArray = [];    

    var sectionMalePlayers = form.getItemById(309334479).asPageBreakItem();
    var sectionFemalePlayers = form.getItemById(856495273).asPageBreakItem();

    // Create the array of players and their clubs ignoring empty cells. Check if the s/sheet row  
    // matches male/female against formFieldsArray[h][0].
    for(var i = 0, j = 0; i < playersClubsSsValues.length; i++) {
      if(playersClubsSsValues[i][0] != "" && playersClubsSsValues[i][1] == formFieldsArray[h][0]) {
        playersClubsArray[j] = playersClubsSsValues[i][0] + " - " + playersClubsSsValues[i][2];
        if (formFieldsArray[h][0] = "Male") {
          // ** THIS IS THE LINE THAT OVERWRITES BUT I NEED IT TO APPEND *** //
          playersClubsFormList.setChoices([playersClubsFormList.createChoice(playersClubsArray[j], sectionMalePlayers)]);
        }
        else {
          // ** THIS IS THE LINE THAT OVERWRITES BUT I NEED IT TO APPEND *** //
          playersClubsFormList.setChoices([playersClubsFormList.createChoice(playersClubsArray[j], sectionFemalePlayers)]);
        }

        playersClubsFormList.setChoices([playersClubsFormList.createChoice(playersClubsArray[j], sectionMalePlayers)]);   
        j = j + 1;
      } // end if
    } // end for loop
  } // end for loop for Males/Females 
}

1 Ответ

0 голосов
/ 04 мая 2020

Проблема:

Когда используется setChoices , все варианты, ранее сохраненные в элементе, удаляются. К элементу добавляются только те, которые указаны при использовании setChoices.

В данный момент вы указываете только один выбор:

playersClubsFormList.setChoices([playersClubsFormList.createChoice(playersClubsArray[j], sectionMalePlayers)]);

Решение:

Вы должны указать все варианты, которые вы хотите получить. Таким образом, в этом случае вам придется сделать следующее:

  • Получить все варианты, которые были ранее сохранены через getChoices . Это приведет к получению массива со всеми текущими вариантами выбора в элементе.
  • Используйте Array.prototype.pu sh () , чтобы добавить вариант, который вы хотите добавить в список вариантов.
  • При использовании setChoices в качестве аргумента должен быть указан массив, полученный на шаге 1 и измененный на шаге.

Пример кода:

Изменить это :

playersClubsFormList.setChoices([playersClubsFormList.createChoice(playersClubsArray[j], sectionMalePlayers)]);

Для этого:

var choices = playersClubsFromList.getChoices();
choices.push(playersClubsFormList.createChoice(playersClubsArray[j], sectionMalePlayers));
playersClubsFormList.setChoices(choices);

Примечание:

  • То же самое изменение должно быть сделано для всех линий, где возникает эта проблема , как этот:
playersClubsFormList.setChoices([playersClubsFormList.createChoice(playersClubsArray[j], sectionFemalePlayers)]);

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...