我已经在Google表格中创建了这个简单的脚本:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu("My Private Menue")
.addItem('My html Dialog', 'StartMessage')
.addToUi();
ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").activate();
var html = HtmlService.createHtmlOutputFromFile('Message');
SpreadsheetApp.getUi().showModalDialog(html, 'TITELLEISTE');
}
但是HtmlService
不能直接启动。但是,当我单击创建的菜单时,HtmlService
的执行就没有问题。
我的错在哪里? Here I have shard my file。
答案 0 :(得分:0)
您的脚本没有错,但是有问题。如果打开您的执行记录,您会看到onOpen(e)
触发器由于“您无权调用showModalDialog” 错误而失败。另外,请注意您需要考虑的additional restrictions。
您的触发器以authMode=LIMITED
运行(如果您log()
触发器的事件对象,您会看到)。根据限制表,对用户界面的访问仅限于添加菜单项,因此会失败(该表位于编辑器附件auth lifecycle guide中,但在authMode=LIMITED
限制的用语,我相信这是唯一提及仅限于添加菜单项的简单触发器。
这也意味着,如果您希望在用户每次打开电子表格时向他们显示一个对话框,那么就简单的触发器(请参阅TheWizEd的注释,建议使用可安装的触发器作为解决方案)而言,您会感到不走运用户单击菜单项时不要运行authMode=LIMITED
(这就是为什么单击后可以显示对话框的原因。)
UPD:答案是在与TheMaster讨论后更新的,以避免造成混淆。
答案 1 :(得分:0)
据我了解,如果您的脚本是容器绑定的,HTML服务可以在Google表格或窗体中显示对话框或侧边栏。这意味着如果它是从该文档而不是作为独立脚本创建的。我可以看到您的代码中已经有绑定脚本方法,例如getActiveSpreadsheet()
。
为什么不使用以下内容:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu("My Private Menu")
.addItem('My html Dialog', 'StartMessage')
.addToUi();
//Return sheet object by name
function getSheet(name){
return SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name);
}
function StartMessage(){
var html = HtmlService.createHtmlOutputFromFile('Message').setWidth(400).setHeight(300);
SpreadsheetApp.getSheet().getUi().showModalDialog(html, 'TITELLEISTE');
}
我希望这会有所帮助!
参考文献:
https://developers.google.com/apps-script/guides/html/
https://developers.google.com/apps-script/guides/dialogs
https://ctrlq.org/code/19954-html-service-google-scripts