如何解决试图为谷歌脚本 UI 警报设置超时 Google Apps 脚本方面:HTML 和 JavaScript:测试:注意:
我想知道是否可以在 google 脚本的 UI 警报中自动神奇地选择否..
var old = e.oldValue;
var ui = SpreadsheetApp.getUi() ;
if( old == null ){} else{
if( old == "NO"){} else {
if(e.range.getRow() == 3 ) {}
else{ var response = ui.alert('⚠️ Change order? ⚠️','Are you sure you want to change this order?',ui.ButtonSet.YES_NO)}}} ;
if(response == ui.Button.NO) {e.range.setValue(old)} ;
这就是我所在的地方,一切正常……只要按下按钮,我希望有一种方法可以在大约 20 秒后自动按“否”。
解决方法
我相信你的目标如下。
- 您希望在打开对话框 20 秒后单击“否”按钮自动运行脚本。
修改点:
- 遗憾的是,在当前阶段,无法通过
SpreadsheetApp.getUi().alert()
实现倒计时。所以在你的情况下,为了实现你的目标,我想建议使用自定义对话框。使用自定义对话框时,可以使用Javascript。这样就可以使用倒计时了。
当以上几点反映到脚本中时,它变成如下。
示例脚本:
Google Apps 脚本方面:
请将以下脚本复制并粘贴到电子表格脚本编辑器的 Code.gs
中。
function processForNo(value) {
// do something
Browser.msgBox(`Clicked NO. Retrueved value is '${value || ""}'.`);
}
function processForYes(value) {
// do something
Browser.msgBox(`Clicked YES. Retrueved value is '${value || ""}'.`);
}
// Please run this function.
function main() {
var value = "ok";
var html = HtmlService.createTemplateFromFile("index");
html.value = value;
SpreadsheetApp.getUi().showModalDialog(html.evaluate().setHeight(100),'⚠️ Change order? ⚠️');
}
HTML 和 JavaScript:
请将以下脚本复制并粘贴到电子表格脚本编辑器的 index.html
中。
Are you sure you want to change this order?
<input type="button" id="yes" value="YES" onclick="google.script.run.withSuccessHandler(google.script.host.close).processForYes()">
<input type="button" id="no" value="NO" onclick="processForNo('')">
<script>
const processForNo = _ => google.script.run.withSuccessHandler(google.script.host.close).processForNo(<?= value ?>);
setTimeout(processForNo,20000);
</script>
- 当运行上述脚本的
main()
时,会打开一个对话框。当您不单击按钮时,对话框将在 20 秒后关闭,并且该过程在单击“否”按钮时运行。此时,运行processForNo
。此外,该值可以在对话框打开时发送。 - 单击“是”按钮时,运行
processForYes
。
测试:
测试上述脚本后,得到如下情况。
注意:
-
以上脚本是用于确认脚本的示例脚本。当上面的脚本包含在你的脚本中时,它变成如下。
-
Google Apps 脚本端
function myFunction() { // do something. I cannot understand about your whole script. So please add your actual script and function name. var old = e.oldValue; var ui = SpreadsheetApp.getUi(); if (old == null) { } else { if (old == "NO") { } else { if (e.range.getRow() == 3) { } else { var html = HtmlService.createTemplateFromFile("index"); html.value = old; ui.showModalDialog(html.evaluate().setHeight(100),'⚠️ Change order? ⚠️'); } } } } function processForNo(old) { // do something } function processForYes(value) { // do something }
-
HTML & Javascript 方面与上述示例脚本相同。
-
-
虽然我无法从您的问题中确认您的函数名称,但从脚本中的
var old = e.oldValue
来看,我认为您可能正在使用简单触发器的 OnEdit 触发器。如果我的理解是正确的,当您使用上述脚本时,请使用可安装的 OnEdit 触发器。这样,当编辑单元格时,showModalDialog
起作用。 Ref
参考:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。