从列中选择随机工作表单元格值以返回并记录

时间:2019-05-14 18:47:40

标签: google-apps-script

我正在构建一个Web脚本,该脚本收集在字段中输入的信息,最后,它允许用户选择代码类型并点击“立即生成”:

我遇到的问题是,一旦用户单击“立即生成”按钮,就会显示密钥代码。

我还想通过随机化它从列表中选择键的方式来缩放它,而不是选择列表中的下一个有效键。这是为了避免人们同时生成密钥并获得相同的密钥。

这是我第一次编码,因此我的知识非常有限,但是...我试图为“立即生成”按钮提供2个功能。

第一个功能从输入字段中收集信息,并将其记录到“数据表”中。同时,它从“密钥”列表中选择有效的代码,将其标记为已兑换,然后将代码复制到数据收集表中。

当您按下“立即生成”按钮时,我试图使第二个功能同时运行。我想使用输入字段的所有ID,并将其用作搜索功能以从“数据表”中提取键,但是我无法使用它。

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];
        }
      }
    }
  }

0 个答案:

没有答案