Web App Script - Как извлечь значение из вопроса для использования в поиске, чтобы заполнить другой вопрос? - PullRequest
0 голосов
/ 19 февраля 2020

Вот мой текущий скрипт и прикрепленный лист .

Мне удалось успешно найти значение индекса с помощью функции getColumnIndex (label), а затем вернуть его Функция в функцию getColumnValues ​​(index), чтобы вытащить все строки в этом указанном c столбце. Кажется, я не могу использовать поле ввода из вопроса автозаполнения. Id = "courseCode" Введите код курса в качестве строки поиска, которая будет использоваться в функции getExpectations (); заполнить HTML вопрос страницы id = "ожидания" как вопрос множественного выбора.

Это работает, если я вручную добавлю текст строки поиска, чтобы вернуть строки столбца. Я хотел бы взять первые 4 символа поля ввода id = "courseCode". Введите код курса (3 буквы и число) в качестве строки поиска, чтобы определить, какие варианты выбора будут заполнять вопрос id = "ожидания".

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

Надеюсь, этой информации достаточно для устранения ошибки моего скрипта. Заранее спасибо за эту заботу. Берегите себя.

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

function collectForm(){
    var submission = {};
    // gets you the values for all id="specific_names"

    submission.grade = document.getElementById("grade").value;
    submission.courseCode = document.getElementById("courseCode").value;

    var list = document.getElementsByClassName('selectedExpectations');
    var selection = ' ';
      for (i = 0; i < list.length; i++){
        if (list[i].checked === true) {
        selection += list[i].value + ", ";
        }
      }

    submission.expectations = selection;

    google.script.run.userClicked(submission);
 }

1 Ответ

1 голос
/ 19 февраля 2020

Короче говоря

Вам нужно что-то вроде этого

/**
 *
 * @param {string} code
 */
function getExpectations2(code) {
  var patt = new RegExp(code.slice(0, 5), 'i');
  var data = SpreadsheetApp.openById(
    '1evNXXgFITrdNwsSdGXmprgzti74AQy03dg0igP5nT0I'
  )
    .getSheetByName('expectations')
    .getDataRange()
    .getValues();
  var colIndex = data[0].reduce(function(p, c, i) {
    return patt.test(c) ? i : p;
  }, -1);
  return colIndex === -1
    ? []
    : data
        .slice(1)
        .filter(function(row) {
          return row[colIndex] !== '';
        })
        .map(function(row) {
          return row[colIndex];
        });
}

getExpectations2 - возвращает столбец по коду в виде списка.

Также вы должны обновить свой listExpectations

  function listExpectations(listLabels) {
    console.log(listLabels);
    const elm = document.getElementById('expectations');
    const label = listLabels
      .map(row => `<option value="${row}">${row}</option>`)
      .join('');

    elm.innerHTML =
      '<option disabled selected>Select expectations not met</option>' + label;
    setTimeout(() => M.FormSelect.init(elm), 0);
  }

Конечно, вам нужно связать их всех

  function populateCodes(codes) {
    var autocomplete = document.getElementById('courseCode');
    var instances = M.Autocomplete.init(autocomplete, {
      data: codes,
      onAutocomplete: onAutocompleteCourseCode,
    });
  }

Где onAutocompleteCourseCode равно

  const onAutocompleteCourseCode = courseCode => {
    google.script.run
      .withSuccessHandler(listExpectations)
      .getExpectations2(courseCode);
  };

enter image description here

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