Изменить вопрос в форме на основе ячейки в Google Sheets - PullRequest
0 голосов
/ 01 марта 2020

Совершенно новичок в кодировании, и я учу себя, как я go. Довольно доволен тем, чего я достиг к настоящему моменту, и теперь хочу показать свои границы обучения!

Итак, контекст - я организую молодежные футбольные турниры. Команды вступают в турнир через форму Google. Форма помещается в таблицу Google, где я затем использую формулы, чтобы убедиться, что я вижу, сколько команд поступило на каждую возрастную группу. Каждая возрастная группа имеет максимальное количество команд в турнире. Ссылка на активную форму: https://forms.gle/8VoBddM8AAJMFXqM7

Что я хочу сделать

В данный момент мне приходится вручную редактировать форму, когда возрастная группа становится близкой чтобы быть полным. Например, клубы могут ввести максимум две команды. Когда остается только один пробел, я в настоящее время вручную должен удалить возможность ввода 2 команд, чтобы можно было ввести одну 1 команду. Это иногда приводит к тому, что я не могу сделать это достаточно быстро, и в игру вступают 2 команды, хотя доступно только 1 место. Так что все становится немного беспорядочно

Итак - есть ли код, который, когда ячейка в листах равна указанному c, в форме Google автоматически удаляет возможность ввода 2 команд, поэтому у меня нет этого проблема?

Во-вторых .......

Когда возрастная группа заполняется, я должен вручную отредактировать форму, чтобы направить любые будущие записи для этой возрастной группы в другой раздел форма для команд, чтобы заполнить форму списка резерва. Как и выше, я иногда не могу сделать это достаточно быстро. Итак, есть ли какой-нибудь код, который я могу использовать, чтобы автоматически направлять пользователя в другой раздел формы на основе значения ячейки в листах?

Итак, в итоге

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

Я новичок во всем этом и учусь, поэтому будьте добры! :)

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вы можете редактировать свою форму автоматически с помощью скриптов приложений.

Например, предположим, у меня есть 5 доступных мест для первых 5 человек, которые заявят о них, используя мою форму. После того, как все доступные споты были заявлены, я хочу удалить из формы элемент «спот претензии». Я могу добиться этого, запуская функцию проверки каждый раз, когда кто-то отправляет ответ.

Пример:

  1. Из электронной таблицы ответов создайте связанный скрипт
  2. В скрипте создайте функцию для проверки (true или false), если у вас все еще есть свободные места.
function spotsAvailable(ss) {
    var maxSpots = 5;

    // Get response sheet.
    var sheet = ss.getSheetByName("Form Responses 1");
    var lastRow = sheet.getDataRange().getLastRow();

    // Count the spots claimed
    var a1Notation = "B2:B" + lastRow;
    var claims = 0;
    ss.getRange(a1Notation).getValues().forEach(
        (claim) => {
            if (claim == "Yes") {
                claims++
            }
            return claims
        });
    // Return true if there are available spots, else false
    if (claims < maxSpots) {
        return true;
    }
    return false;

}
Создайте функцию, которая будет запускаться при отправке формы:
function changeForm() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var form = FormApp.getActiveForm();

    if (spotsAvailable(ss) == false) {
        // If no more spots remove claim spot item from form
        var items = form.getItems();
        // Item index one (1) is our multiple selection question
        // You can get items by id, or by index.
        form.deleteItem(1);
    }

}
Установите триггер для запуска «При отправке формы». Расслабьтесь, зная, что можно претендовать только на максимальное количество мест, ваш сценарий позаботился об этом за вас.

Примечания:

Обратите внимание, что это только пример, и в зависимости от ваших конкретных потребностей вы можете использовать любой из доступных методов в Службах сценариев приложений, на которые ссылаются ниже. ..


Рекомендуемое чтение:

0 голосов
/ 03 марта 2020

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

THRESHOLDS

Вы хотите указать возрастные группы, в которых после отправки новой формы "Число оставшихся мест" равно 1 или 0.

Предположим, что Есть много способов сделать это, и этот сценарий является одним из подходов.

Ключевые элементы

  • функция должна быть установлена ​​как onFormSubmit
  • фактическая отправка формы не кажется важной (хотя это может измениться по мере дальнейшего совершенствования сценария)
  • данные, извлеченные из обзора, включают столбец B-> F, поскольку после того, как значение (столбец F) равно оцениваемый, необходимо определить соответствующую возрастную группу (столбец B)
  • al oop, оператор IF и оператор регистратора используются для идентификации случаев, когда был достигнут порог - это это самый простой из возможных подходов; другие методы, такие как indexOf и / или switch, могут использоваться для определения порога и полученного в результате действия.
  • Обратите внимание, что ALL экземпляры порогов возвращаются; результат не ограничен конкретным экземпляром, сгенерированным последним ответом формы. Возможно / вероятно, это можно сделать при необходимости.

function so6047592901() {

  // sample of onFormSubmit to check 

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var overview = ss.getSheetByName("Overview");


  // get the data
  var startRow=3
  var startCol=2
  var rows = 19
  var cols = 5
  var data =  overview.getRange(startRow, startCol, rows, cols);
  //Logger.log("DEBUG: data range = "+data.getA1Notation());
  var values = data.getValues();
  //Logger.log("DEBUG: number values = "+values)


  // test for places left = 1
  var test1left = "1";
  // test for places left = 0
  var test0left = "0";

  for (var i=0;i<values.length;i++){
    // test for the Age Group
     var ageGrp = values[i][0]
    if (values[i][4] == test1left) {
      Logger.log("DEBUG: Places Left = "+values[i][4]+", i:"+i+" , Age group is "+ageGrp);
    }
    if (values[i][4] == test0left){
      Logger.log("DEBUG: Places Left = "+values[i][4]+", i:"+i+" , Age group is "+ageGrp);
    }
  }
}
...