google-apps-script - 从列中选择随机表单元格值以返回并记录
问题描述
我正在构建一个收集在字段中输入的信息的网络脚本,最后,它允许用户选择代码类型并在点击“立即生成”时:
我遇到的问题是,一旦用户单击“立即生成”按钮,就会向用户显示密钥代码。
我还想通过随机化从列表中选择一个键的方式来扩展它,而不是选择列表中的下一个有效键。这是为了避免人们同时生成密钥并获得相同的密钥。
这是我第一次编码,所以我的知识非常有限,但是......我试图赋予“立即生成”按钮 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];
}
}
}
}
解决方案
推荐阅读
- algorithm - 计算概率:没有人做出正确决定的概率是多少?
- python - 计算每组结果的百分比
- java - Java,在游戏中为敌波制作和放置循环的最佳方法
- azure - 无法使用 Microsoft 示例在 Azure APIM 中生成 SAS
- python - ImportError:找不到框架/System/Library/Frameworks/OpenGL.framework
- ios - 将 UIView 作为子视图添加到 scrollView 时,如何使 UIView 可伸缩?
- java - 使用 Places 库时如何在 proguard 中编写规则
- c# - 无法在通用方法中将“枚举”值转换为“int”
- c# - 为什么当我尝试访问绑定对象的属性时 Xamarin 什么也不呈现?
- angular - Angular Bootstrap 4 changebox isn't changing