"SpreadsheetApp.getUi() cannot be called from this context"
"SpreadsheetApp.getUi() cannot be called from this context"
在 Google Sheets 电子表格中,我想显示一个从 HTML 创建的模态对话框,然后 运行 一个函数,然后自动关闭 HTML 提示。
对话框应该一直保留到函数执行完毕,然后自动消失。
此过程必须每 3 小时重复一次,并且脚本需要像我一样 运行(因为我拥有其他用户没有的编辑权限)所以简单的触发器可能无法工作(我'我读过,如果您希望函数 运行 像您一样而不是当前用户在给定时间的任何人,则必须创建一个可安装的触发器)
我目前有:
- 一个 .gs 函数 Magic_Telling,它使用 HTML 文件
创建模式对话框
- 一个 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,提示消失)。完美。
然后我创建了一个可安装的触发器
脚本编辑器 > 资源 > 当前项目的触发器
并每 3 小时向 运行 Magic_Telling 添加一个触发器。
(我猜这是一个 "installable trigger")
但我收到此错误消息:
Cannot call SpreadsheetApp.getUi() from this context.
...当函数到达Magic_Telling
的第一行时
我应该怎么做才能解决这个问题?
Ui 对话框 不能 由时间触发函数调用,它们必须由用户操作触发,也就是说单击菜单项或调用显示 UI.
函数的某种按钮
对于刚开始使用 Tools/Scripteditor 菜单编写脚本的每个人来说,出现 'Cannot call SpreadsheetApp.getUi() from this context.' 错误的简单案例。
在这种情况下,您仅使用独立脚本,这意味着您的脚本仅附加到一个文档或电子表格。
独立脚本允许即简单地调用 doc = DocumentApp.getActiveDocument(),脚本附加到的活动文档。
我碰巧用了'var ui = SpreadsheetApp.getUi();'在此处获取错误消息时......
当我一直走到 Oauth Scopes 和 Developer Console 时,我花了几个小时才找出这条简单的线出了什么问题。
所以,对于一些初学者来说,知道我实际上使用了 var ui = SpreadsheetApp.getUi(); 可能会有所帮助。在文档脚本中。
很明显我得到了错误,但是......
希望这对一些简单的脚本编写者有帮助!
PS。我希望不用说使用 'var ui = DocumentApp.getUi();'
在 SpreadSheet 中将产生类似的错误消息。
如果发生此错误,请检查触发器或关闭脚本编辑器选项卡并刷新 google 工作表,然后打开脚本项目。
确保 appscript 是绑定脚本而不是独立脚本。否则 getUi() 将无法工作。
在这里查看我所有关于 appscript 的课程http://playlist.mashoun.com/
在 Google Sheets 电子表格中,我想显示一个从 HTML 创建的模态对话框,然后 运行 一个函数,然后自动关闭 HTML 提示。
对话框应该一直保留到函数执行完毕,然后自动消失。
此过程必须每 3 小时重复一次,并且脚本需要像我一样 运行(因为我拥有其他用户没有的编辑权限)所以简单的触发器可能无法工作(我'我读过,如果您希望函数 运行 像您一样而不是当前用户在给定时间的任何人,则必须创建一个可安装的触发器)
我目前有:
- 一个 .gs 函数 Magic_Telling,它使用 HTML 文件 创建模式对话框
- 一个 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,提示消失)。完美。
然后我创建了一个可安装的触发器 脚本编辑器 > 资源 > 当前项目的触发器 并每 3 小时向 运行 Magic_Telling 添加一个触发器。 (我猜这是一个 "installable trigger")
但我收到此错误消息:
Cannot call SpreadsheetApp.getUi() from this context.
...当函数到达Magic_Telling
的第一行时我应该怎么做才能解决这个问题?
Ui 对话框 不能 由时间触发函数调用,它们必须由用户操作触发,也就是说单击菜单项或调用显示 UI.
函数的某种按钮对于刚开始使用 Tools/Scripteditor 菜单编写脚本的每个人来说,出现 'Cannot call SpreadsheetApp.getUi() from this context.' 错误的简单案例。
在这种情况下,您仅使用独立脚本,这意味着您的脚本仅附加到一个文档或电子表格。 独立脚本允许即简单地调用 doc = DocumentApp.getActiveDocument(),脚本附加到的活动文档。
我碰巧用了'var ui = SpreadsheetApp.getUi();'在此处获取错误消息时...... 当我一直走到 Oauth Scopes 和 Developer Console 时,我花了几个小时才找出这条简单的线出了什么问题。
所以,对于一些初学者来说,知道我实际上使用了 var ui = SpreadsheetApp.getUi(); 可能会有所帮助。在文档脚本中。 很明显我得到了错误,但是...... 希望这对一些简单的脚本编写者有帮助!
PS。我希望不用说使用 'var ui = DocumentApp.getUi();' 在 SpreadSheet 中将产生类似的错误消息。
如果发生此错误,请检查触发器或关闭脚本编辑器选项卡并刷新 google 工作表,然后打开脚本项目。
确保 appscript 是绑定脚本而不是独立脚本。否则 getUi() 将无法工作。
在这里查看我所有关于 appscript 的课程http://playlist.mashoun.com/