如何在独立脚本运行时锁定电子表格
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在独立脚本运行时锁定电子表格相关的知识,希望对你有一定的参考价值。
我有一个电子表格,通过onEdit触发器调用独立脚本中的函数。独立函数有循环,可以执行几秒钟。如果用户在独立脚本运行时编辑另一行,则第二行中的信息将与循环中第一行中的信息混淆。
独立脚本中的代码是: -
var tasklistID="mytaslistid"
function getTasks() {
var tasks=Tasks.Tasks.list(tasklistID)
return tasks
}
电子表格中的代码是: -
function getTasks(){
TaskManagerScript.getTasks()
}
安装onEdit触发器调用电子表格getTasks函数,该函数又调用独立的getTasks函数
注意:这是我的代码的简化版本。实际版本还会过滤任务以从特定日期提取任务。这涉及循环遍历列表中的任务,这需要时间
因此,我需要一种方法来锁定电子表格,使其不被编辑,直到独立脚本中的函数完成其执行。
谢谢
答案
您可以使用modal
对话框:
模态对话框阻止用户与对话框以外的任何内容进行交互。
// Display a modal dialog box with custom htmlService content and script
var htmlOutput = HtmlService
.createHtmlOutput('<p>Please wait...</p>')
.append('<script>google.script.run.withSuccessHandler(google.script.host.close).callStandaloneFunction()</script>')
.setWidth(250)
.setHeight(300);
SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'My add-on');
另一答案
接受TheMaster的评论我带来了一个涉及使用空循环的工作。代码现在修改如下。
在保税脚本中: -
function getTasks(){
\code to open modal dialog
showDialog()
\Empty while loop with call to standalone script ==true as condition to end loop
while(TaskManagerScript.addTask(e)==false){}
\code to close modal dialog
closeDialog()
}
在独立脚本中: -
var tasklistID="mytaslistid"
function getTasks() {
var tasks=Tasks.Tasks.list(tasklistID)
\some more codes
return true
}
这样做的诀窍
以上是关于如何在独立脚本运行时锁定电子表格的主要内容,如果未能解决你的问题,请参考以下文章
Openoffice中的电子表格,如何把最上面的一行锁定在顶端不动