Выберите случайное значение ячейки листа из столбца для возврата и войдите - PullRequest
0 голосов
/ 14 мая 2019

Я создаю веб-скрипт, который собирает информацию, введенную в поля, и, в конце, позволяет пользователю выбрать тип кода и после нажатия «Создать сейчас»:

Проблема, с которой я сталкиваюсь, заключается в том, чтобы код ключа отображался пользователю после того, как он нажал кнопку «Создать сейчас».

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

Это мое первое кодирование, так что мои знания очень ограничены, но ... Я попытался дать кнопке «Создать сейчас» 2 функции.

Первая функция собирает информацию из полей ввода и записывает ее в «Таблицу данных». В то же время он выбирает действительный код из списка «Ключи», помечает его как погашенный и копирует код в лист сбора данных.

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

function userClicked(userInfo){

  var ss = SpreadsheetApp.openByUrl(url)
  var ws = ss.getSheetByName("Data");
  var keysSheet = ss.getSheetByName("Keys");
  var codeTypeColumn = getFirstMatchingCoord(keysSheet, userInfo.codeType, 1, null)[1];
  var firstValidCodeRow = getFirstMatchingCoord(keysSheet, "Valid", null, codeTypeColumn + 2)[0];
  keysSheet.getRange(firstValidCodeRow, codeTypeColumn + 2).setValue("redeemed");
  var key = keysSheet.getRange(firstValidCodeRow, codeTypeColumn).getValue();

  ws.appendRow([userInfo.memberFirst, userInfo.memberLast, userInfo.memberEmail, userInfo.orderNum, userInfo.agentFirst, userInfo.agentLast, userInfo.codeType, key, new Date()]);
} 

function getFirstMatchingCoord(sheet, value, row, col) {
  if (row === null) {
    var range = sheet.getRange(1, col, sheet.getMaxRows(), 1);
  } else {
    var range = sheet.getRange(row, 1, 1, sheet.getMaxColumns());
  }
  var values = range.getValues();

  for (var i = 0; i < values.length; i++) {
    var value_row = values[i];
    for (var j = 0; j < value_row.length; j++) {
      if (values[i][j] == value) {
        if (row === null) {
          return [i + 1, col];
        } else {
          return [row, j + 1];
        }
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...