为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2022-05-26 11:31:29
.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) 时,用户被重定向到 Confirmation,并且该范围内低于该值的任何其他值将用户重定向到错误例如:如果我们在 L2:L 范围内有 4 个值,如下所示: L2: John L3: Mike L4: Jenny L5: Tom如果用户将 John 提交为newRow[1],则重定向到 Confirmation 并且这是正确的,没有问题,但是如果用户提交 Mike 或 Jenny 或 tom,重定向到错误并且这个错误,因为新提交的值仍在范围内,并且应该也将用户重定向到 Confirmation任何帮助表示赞赏。提前致谢
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

用于Array.flat在检查值而不是 for 循环之前先展平数据:


if(values.flat().includes(value)){

  return /*confirmation page*/

} else {

  return /*error page*/

}

for 循环不起作用,因为逻辑错误:您的代码指出:


for each value in values    

  if this value(in loop) is equal to value, I'm checking    

    end this function and return confirmation html

  else

    end this function and return error html

无论如何,该函数将在检查第一个值后结束。执行这种 for 循环的正确方法是:


var isValueInColL = false;

for (var i = 0; i < values.length; i++) {

  if (values[i][0] == value) {//added [0]

    isValueInColL = true;

    break;// no need to check rest of col L

  }

}

var html = isValueInColL ? 'Confirmation' : 'Error';

return HtmlService.createTemplateFromFile(html).evaluate()

.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);

}


查看完整回答
反对 回复 2022-05-26
?
米脂

TA贡献1836条经验 获得超3个赞

试试这种方式:


function doGet() {

  return HtmlService.createHtmlOutputFromFile('Form.html');

}


function doPost (e) {

  Logger.log(JSON.stringify(e))

  if(!e || !e.parameter) {

    Browser.msgBox('No Parameters');

    return;

  }

  var doc=SpreadsheetApp.getActive();

  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 sheet1=doc.getSheetByName("Sheet1");

  var values=sheet1.getRange(2,12,sheet1.getLastRow()-1,1).getValues();

  var value=newRow[1];

  for (var i=0;i<values.length; i++) {

    if (values[i][0]==value) {

      return HtmlService.createHtmlOutputFromFile('Confirmation');

    }else {

      return HtmlService.createHtmlOutputFromFile('Error');

    }

  }

}

以这种方式尝试您的html:


<!DOCTYPE html>

<html>

<head>

  <base target="_top">

  <style>body {font-family: "Lato", sans-serif}</style>

</head>

<body>

  <form action="script URL" target="_self" method="POST">

  <input type="number" placeholder="Enter OTP" required name="OTP">

  <button type="submit">Send</button>

  </form>

</body>

</html>

您的一些 html 标签不合适,例如 body 标签不属于


查看完整回答
反对 回复 2022-05-26
  • 2 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号