为啥我不能从 Google AppScript for Sheets 的侧边栏中调用服务器函数? [复制]
Posted
技术标签:
【中文标题】为啥我不能从 Google AppScript for Sheets 的侧边栏中调用服务器函数? [复制]【英文标题】:Why can't I call a server function from the sidebar in Google AppScript for Sheets? [duplicate]为什么我不能从 Google AppScript for Sheets 的侧边栏中调用服务器函数? [复制] 【发布时间】:2020-06-11 19:00:38 【问题描述】:我在从 Google 表格的 html 边栏中调用服务器端 Apps 脚本函数时遇到问题。
我已经用下面的简单示例代码复制了我的问题。
应该怎么做
单击该按钮应在我的 Code.gs 脚本中调用 alert
并向用户显示警报。
实际发生的情况
点击按钮显示错误:
We're sorry, a server error occurred while reading from storage. Error code PERMISSION_DENIED.
在 alert()
的 Apps 脚本仪表板的“执行”部分中没有任何条目,因此该函数似乎从未被调用过?
代码.gs:
function onOpen()
const ui = SpreadsheetApp.getUi();
ui.createMenu('Matthew')
.addItem('Show Sidebar', 'sidebar')
.addToUi();
;
function sidebar()
const html = HtmlService.createHtmlOutputFromFile('test.html')
.setTitle('Matthew Experiment')
.setWidth(300);
SpreadsheetApp.getUi().showSidebar(html);
function alert()
SpreadsheetApp.getUi().alert("alert!");
test.html(以及正文)
<body>
<div class="container">
<button class="btn btn-success" onclick="doSomething()">Click Me!</button>
</div>
<script>
function doSomething()
google.script.run.withFailureHandler(function(error)
console.log("error")
console.log(error.message)
).withSuccessHandler(function(result)
console.log("done!")
).alert();
</script>
</body>
我已经确认客户端代码正确地使用了服务器端函数名称,它只是调用了不起作用的函数。
我的代码似乎与所有入门指南相同,但我没有看到其他人发布有关此问题的帖子。希望这里有人比我更了解这个问题。
更新,更奇怪
我打开了一个私人窗口,它工作,所以我想,也许这是一个引起问题的扩展程序?但即使禁用所有扩展也不能在主窗口中修复它。我已经注销/登录到我的谷歌帐户,但如果不打开私人浏览器窗口,它仍然无法正常工作。
这个问题在 chrome/edge/firefox 中是一致的。
【问题讨论】:
相关:***.com/q/60412319 根据 issuetracker 的说法,这仅在 chrome 中发生,当全局登录用户与脚本和电子表格的所有者不同时。 我既是脚本的所有者,也是电子表格的所有者,在 FF 中也是如此。 :-( 哦,是的,我的主要用户是我的 gmail 帐户,这是我的辅助帐户 @TheMaster 我会深入研究这个问题,你可能已经想通了 【参考方案1】:当全局登录用户与脚本所有者不同时会发生这种情况。
注销您的所有 google 帐户,然后使用您用于创建脚本的帐户重新登录。这解决了问题。
【讨论】:
这是一个非常可怕的错误,意味着侧边栏几乎没有用,除非你正在构建一个完全成熟的插件【参考方案2】:这是一个与服务器通信的侧边栏对话框的简单示例
function showMySideBar()
var html='<input type="button" value="Click Me" onClick="doSomething()" />';
html+='<script>function doSomething()google.script.run.withSuccessHandler(function(msg)window.alert(msg);).pleaseHelp();</script>';
SpreadsheetApp.getUi().showSidebar(HtmlService.createHtmlOutput(html));
function pleaseHelp()
return 'What can I do to help?';
【讨论】:
以上是关于为啥我不能从 Google AppScript for Sheets 的侧边栏中调用服务器函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Google 表格/AppScript - 将数据从一张表格复制到另一张表格
某些Google幻灯片AppScript是否已记录但不受支持?
Google Sheets AddOn - 通过服务帐户集成 AppScript 和 BigQuery