我有一个简单的Google Spreadsheet,后面有一些代码-也就是说,我的脚本已绑定到Spreadsheet文件(没有独立代码,也没有部署任何代码作为附件)。当用户编辑一个给定的列时,脚本将运行电子邮件检查(即,它将当前用户电子邮件与表中保存的电子邮件进行比较)。代码如下:
function showDialog() {
var ui = SpreadsheetApp.getUi();
var html = HtmlService.createHtmlOutput("Apenas o usuário que registrou a emissão da passagem pode realizar alterações em seu registro!<br><input type=\"button\" value=\"Fechar\" onclick=\"google.script.host.close()\" />")
.setWidth(400)
.setHeight(90);
ui.showModalDialog(html, 'Edição não permitida!');
}
function onEdit(e){
var ui = SpreadsheetApp.getUi();
var this_file = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/key_to_my_file/edit');
var main_sheet = this_file.getSheetByName("Tickets");
var edited_range = e.range;
var edited_row = edited_range.getRow();
if(e.user != main_sheet.getRange("B"+edited_row).getValue()){
edited_range.setValue(e.oldValue);
showDialog();
}
}
我的问题是,作为脚本的所有者,我已授予它所需的所有权限-因此,可以通过“脚本编辑器”或“电子表格”本身正确显示我的对话框,编辑我不允许的数据脚本规则进行编辑。
但是,对于其他用户,它不起作用。我没有OnEdit触发器的执行日志中的任何错误,什么也没有。然后,如果用户打开脚本编辑器,运行功能showDialog
,在下面的框中授予权限,则所有这些都将开始工作。
但是,我不能指望非技术用户将能够执行所有操作。我需要一种能够遵循这些步骤的方法。另外,我必须使用自定义对话框,而不是通常的ui.alert()(顺便说一句,它没有任何权限问题也可以正常工作),因为我需要一个非阻塞警报。
我基于google apps script docs page对此问题的理解,尤其是“自定义侧边栏”会话。
我该如何摆脱对权限的需求,或者强制电子表格的用户从一开始就授予他们权限?