你好,谢谢!
我用一个按钮在Google Spreadsheet中创建了一个侧面板。单击该按钮将运行服务器功能。此功能显示一个警报框,并将文本插入特定的单元格。
工作示例:
https://docs.google.com/spreadsheets/d/1Mv-0YRSJJpwSaRh_xAeZDtVqL-P-e5nS80fUJIq_CJ4/edit?usp=sharing
现在是棘手的部分: 我正在其他共享表中使用此代码,因为它包含机密数据。在此工作表中,该函数仅在我通过alert()调用删除或//禁用该行时运行。
我知道很难找到这样的错误,但是也许有人知道它可能是什么?
CODE.GS
function onOpen() {
// Add a custom menu to the spreadsheet.
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.createMenu('Custom Menu')
.addItem('myToDoPanelLabel', 'showTestPanel')
.addToUi();
}
function insert(value) {
SpreadsheetApp.getUi().alert("Message"); //with this line it only works in test sheet but not in the original sheet
var thisID="1Mv-0YRSJJpwSaRh_xAeZDtVqL-P-e5nS80fUJIq_CJ4";
var ss = SpreadsheetApp.openById(thisID).getSheetByName("Tab1");
ss.getRange(1,2).setValue("New Txt");
}
function showTestPanel() {
var template = HtmlService.createTemplateFromFile('panel');
var htmlOutput = template.evaluate()
.setTitle('ToDoPanel');
SpreadsheetApp.getUi().showSidebar(htmlOutput);
}
PANEL.HTML
<script>
window.mark = function() {
google.script.run.insert();
};
</script>
<button onclick='mark()'>click me</button>
编辑:问题的核心是没有对话框出现!通过alert()调用,它将停止代码(可以在Scrip日志记录“等待用户响应时超时”中看到超时)。使用以下建议的解决方案,它将执行但仍不会显示自定义对话框。 这是权限问题吗?
答案 0 :(得分:1)
好吧,.alert
阻止了服务器的执行。报价:
在用户的编辑器中打开一个对话框,其中包含给定的消息和一个“确定”按钮。打开对话框时,此方法将挂起服务器端脚本。在用户关闭对话框后,该脚本将继续执行,但是Jdbc连接和LockService锁不会在整个暂停期间持续存在。
根据他们在their Dialog guide中的建议,您可以使用“自定义”对话框:
自定义对话框请勿在对话框打开时暂停服务器端脚本。客户端组件可以使用HTML服务界面的google.script API或UI服务界面的服务器处理程序,对服务器端脚本进行异步调用。
因此,创建自定义对话框可能会解决您的问题。