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;
我在 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;