google 脚本中的 getValue() returns false 在添加 google 表单条目的 运行 函数之后

getValue() in google script returns false after running function that adds a google form entry

我在 google sheet 中创建了一个表单,在单击“发送”按钮后,它会创建一个 google 表单条目(通过加载 url)在 sheet 上输入的数据。脚本如下所示:

function registerTest() {
  var ws_MAIN = SpreadsheetApp.getActiveSheet();
  var url = ws_MAIN.getRange("U1").getValue();
  if(url=="") return SpreadsheetApp.getUi().alert("ERROR: Incomplete data");
  var html = HtmlService.createHtmlOutput('<html><script>'
  +'window.close = function(){window.setTimeout(function(){google.script.host.close()},9)};'
  +'var a = document.createElement("a"); a.href="'+url+'"; a.target="_blank";'
  +'if(document.createEvent){'
  +'  var event=document.createEvent("MouseEvents");'
  +'  if(navigator.userAgent.toLowerCase().indexOf("firefox")>-1){window.document.body.append(a)}'                          
  +'  event.initEvent("click",true,true); a.dispatchEvent(event);'
  +'}else{ a.click() }'
  +'close();'
  +'</script>'
  // Offer URL as clickable link in case above code fails.
  +'<body style="word-break:break-word;font-family:sans-serif;">Unable to register automatically. <a href="'+url+'" target="_blank" onclick="window.close()">Please clic here</a>.</body>'
  +'<script>google.script.host.setHeight(40);google.script.host.setWidth(410)</script>'
  +'</html>')
  .setWidth(90).setHeight(1);
  SpreadsheetApp.getUi().showModalDialog(html,"Registering..." );
  
  var n,check;
  for(n=0;n<5;n++){
    check = ws_MAIN.getRange("O31").getValue(); //to check if form entry was created
    if(check==true){
      deleteData();
      return;
    }
    Utilities.sleep(500);
  }
}

在单元格“O31”上,我有一个简单的函数“=ISNUMBER(MATCH(B4,FormResponses!D:D,0))”,如果找到表单 ID,它会显示 true。所以在函数的第一部分运行后 var check 应该 return true(正如我在屏幕上看到的 sheet 更改为 TRUE),我尝试使用 Utilities.sleep 并装箱循环以检查值在多次读取后是否发生变化,但它不起作用,我不知道为什么。如果有人能帮助我理解我做错了什么,我将非常感激,我对编码还比较陌生。谢谢。

我会尝试以这种方式更改代码的最后一部分:

SpreadsheetApp.flush();
var check = ws_MAIN.getRange("O31").getValue(); //to check if form entry was created
if (check == true) deleteData();
return;