10

在 Google 表格电子表格中,我想显示一个从 HTML 创建的模式对话框,然后运行一个函数,然后自动关闭该 HTML 提示。

对话框应该一直停留到函数完成执行,然后自动消失。

这个过程必须每 3 小时重复一次,并且脚本需要像我一样运行(因为我有其他用户没有的编辑权限)所以简单的触发器可能不起作用(我读过你必须创建一个可安装的触发器如果您希望该功能以您的身份运行,而不是当前用户在给定时间的任何人)

我目前有:

  1. .gs 函数 Magic_Telling,使用 HTML 文件创建模式对话框
  2. 一个 HTML 文件 Prompt_Styling,其中包含提示的 css / html 样式。该 HTML 文件然后调用处理行的 .gs 函数 All_In

我的代码:

Magic_Telling 从 HTML 文件创建模式对话框。

function Magic_Telling() {
var UI = SpreadsheetApp.getUi();
var newline = '\n'
// Display a modal dialog box with custom HtmlService content.
var htmlOutput = HtmlService.createHtmlOutputFromFile('PromptStyling')
    .setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setWidth(300)
    .setHeight(100);
UI.showModalDialog(htmlOutput, ' ');
}


Prompt_Styling HTML 文件,用于样式提示 + 运行将处理行的函数 All_In 的脚本

<html>
<head>
// some irrelevant stuff here
</head>

<script>
window.onload = function() {    
google.script.run
    .withSuccessHandler(closeDialog)
    .All_In();
    };

window.closeDialog = function() {
    google.script.host.close();
    };

</script>
</html>

All_In处理行的函数

function All_In() {

UnlockRowBlocks();
UnhideRowBlocks();
LockRowBlocks();
HideRowBlocks();

}

当我从脚本编辑器运行 MagicTelling 时,它运行良好。整个序列执行(显示提示,执行 All_In,提示消失)。完美的。

然后,我通过转到 Script Editor > Resources > Current project's triggers 创建了一个可安装的触发器,并添加了一个触发器以每 3 小时运行一次 Magic_Telling。(我认为这是一个“可安装的触发器”)

但我收到此错误消息:

无法从此上下文中调用 SpreadsheetApp.getUi()。

...当函数到达 Magic_Telling 的第一行时

我应该怎么做才能解决这个问题?

4

3 回答 3

16

Ui 对话框不能由时间触发函数调用,它们必须由用户操作触发,也就是说单击菜单项或某种按钮调用显示 UI 的函数。

于 2016-03-20T17:47:55.307 回答
3

获取“无法从此上下文中调用 SpreadsheetApp.getUi() ”的简单案例。 - 对于刚开始使用工具/脚本编辑器菜单编写脚本的每个人来说都是错误的。

在这种情况下,您仅使用独立脚本,这意味着您的脚本仅附加到一个文档或电子表格。独立脚本允许 ie 简单地调用 doc = DocumentApp.getActiveDocument(),即脚本附加到的活动文档。

我碰巧使用了'var ui = SpreadsheetApp.getUi();' 在此处获取 ERROR 消息时……我花了几个小时才发现这条简单的线路出了什么问题,因为我一直走到 Oauth Scopes 和开发者控制台。

因此,了解我实际上使用了 var ui = SpreadsheetApp.getUi(); 可能对一些初学者有所帮助。在文档脚本中。很清楚我得到了错误,但是......希望这对一些简单的脚本编写者有帮助!

PS。我希望不用说使用 'var ui = DocumentApp.getUi();' 在 SpreadSheet 中将产生类似的错误消息。

于 2021-07-01T03:13:53.433 回答
1

如果发生此错误,请检查触发器或关闭脚本编辑器选项卡并刷新谷歌表格,然后打开脚本项目。

确保 appscript 是绑定脚本而不是独立脚本。或者 getUi() 不起作用。

在这里查看我所有关于 appscript 的课程http://playlist.mashoun.com/

于 2021-12-28T17:31:26.573 回答