首页 > 解决方案 > 从列中选择随机表单元格值以返回并记录

问题描述

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

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

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

这是我第一次编码,所以我的知识非常有限,但是......我试图赋予“立即生成”按钮 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];
        }
      }
    }
  }

标签: google-apps-script

解决方案


推荐阅读