如果值与特定范围内的任何单元格匹配,则重定向-Google表格

问题描述 投票:-2回答:2

。gs(已更新)

function doGet() {
return HtmlService.createTemplateFromFile('Form.html').evaluate()
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}

var scriptProp = PropertiesService.getScriptProperties();

function doPost (e) {
var lock = LockService.getScriptLock();
lock.tryLock(10 * 1000);

var doc = SpreadsheetApp.getActiveSpreadsheet();
var sh = doc.getSheetByName("Sheet1");
var values = sh.getRange(2, 12, sh.getLastRow()-1, 1).getValues();
// Logger.log(values);


try {    

var sheet = doc.getSheetByName("OTP");
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow() + 1;
var newRow = headers.map(function(header) {
return header === 'Timestamp' ? new Date() : e.parameter[header]
});
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);

var value = newRow[1];
for (var i = 0; i < values.length; i++) {
if (values[i] == value) {
return HtmlService.createTemplateFromFile('Confirmation.html').evaluate()
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
} else {
return HtmlService.createTemplateFromFile('Error.html').evaluate()
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}}}

catch (e) {
return ContentService.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON)
}

finally {
lock.releaseLock()
}}

上面的代码的目的是检查newRow[1]值是否与Sheet1中范围(L2:L)中的任何单元格值匹配,然后重定向到Confirmation.html,否则重定向到基于if的Error.html。代码中的语句

现在的问题是;仅当newRow[1] ==范围(L2:L)中的第一个/顶部值时,用户才被重定向到“确认”,而低于该范围内的任何其他值都将用户重定向到错误。

例如:如果我们在L2:L范围内有4个值,例如:L2:约翰L3:麦克L4:珍妮L5:汤姆

如果用户将John提交为newRow[1],则将其重定向到Confirmation,但没问题,这是正确的,但是

如果用户提交了Mike或Jenny或tom,则重定向到错误,这是错误的,因为新提交的值仍在范围内,并且也应将用户重定向到Confirmation。>

感谢您的帮助。在此先感谢

。gs(更新)函数doGet(){返回HtmlService.createTemplateFromFile('Form.html')。evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); } var scriptProp = PropertiesService ....

javascript google-apps-script google-sheets
2个回答
0
投票

使用Array.flat首先对数据进行扁平化,然后再检查该值而不是for循环:

Array.flat

0
投票

以这种方式尝试:

© www.soinside.com 2019 - 2024. All rights reserved.