如何在独立脚本运行时锁定电子表格

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
}

这样做的诀窍

以上是关于如何在独立脚本运行时锁定电子表格的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 Google 电子表格中的 Apps 脚本代码?

计算机被锁定时如何发送电子邮件?

Openoffice中的电子表格,如何把最上面的一行锁定在顶端不动

在电子表格中如何锁定公式栏?

谷歌应用程序脚本在第一次运行时授予用户权限访问电子表格上的服务,而无需打开脚本编辑器

如何在电子表格中的日历谷歌中获得执行操作的权限