我有一个包含6个编辑器的google电子表格,包括我作为所有者。当除工作表所有者以外的任何编辑者在下拉菜单中选择某个值时,与classAttendance()关联的onEdit触发器就会开始工作。没关系。但是问题是,尽管用户是不同的编辑者,但每次数据都受到所有者名称保护(具有编辑访问权限)时。它应该在该特定的编辑器名称上,并且应该对其具有编辑权限。如何解决?
function classAttendance(e){
var spreadsheet = SpreadsheetApp.getActive();
var dashboard = spreadsheet.getSheetByName("Dashboard");
var sheetName = dashboard.getRange("A4").getValue();
if (e.range.getA1Notation() === 'C6' && e.range.getValue() === "Start 1-Period") {
refreshSheet();
onePeriod();
}
if (e.range.getA1Notation() === 'C6' && e.range.getValue() === "Start 2-Period") {
refreshSheet();
twoPeriod();
}
}
function refreshSheet() {
//For protecting dashboard while scripts running
var spreadsheet = SpreadsheetApp.getActive();
var dashboard = spreadsheet.getSheetByName("Dashboard");
var rangem = dashboard.getRange("A1:K71");
var timeZone = Session.getScriptTimeZone();
var stringDate = Utilities.formatDate(new Date(), timeZone, 'dd/MM/yy HH:mm');
var me = Session.getEffectiveUser();
var description = 'Scripts running on ' + stringDate + ' by ' + me;
var protectionm = rangem.protect().setDescription(description);
protectionm.addEditor(me);
protectionm.removeEditors(protectionm.getEditors());
if (protectionm.canDomainEdit()) {
protectionm.setDomainEdit(false);
}
Utilities.sleep(300000);
}
答案 0 :(得分:0)
即使另一个具有编辑访问权限的用户打开了电子表格,可安装版本仍在创建触发器的用户的授权下运行。
现在,removeEditor()的文献记录说:
电子表格的所有者和当前用户都无法删除。
换句话说:
protectionm.addEditor(me);
仅会将您添加为编辑者(但是您已经是编辑者了。)addEditor
之前使用removeEditos()
没有意义-后者将删除之前添加的所有编辑器。user
检索活动用户实施示例:
function classAttendance(e){
//////////MODIFICATION HERE
var user = e.user;
var spreadsheet = SpreadsheetApp.getActive();
var dashboard = spreadsheet.getSheetByName("Dashboard");
var sheetName = dashboard.getRange("A4").getValue();
if (e.range.getA1Notation() === 'C6' && e.range.getValue() === "Start 1-Period") {
//////////MODIFICATION HERE
refreshSheet(user);
onePeriod();
}
if (e.range.getA1Notation() === 'C6' && e.range.getValue() === "Start 2-Period") {
//////////MODIFICATION HERE
refreshSheet(user);
twoPeriod();
}
}
//////////MODIFICATION HERE
function refreshSheet(user) {
//For protecting dashboard while scripts running
var spreadsheet = SpreadsheetApp.getActive();
var dashboard = spreadsheet.getSheetByName("Dashboard");
var rangem = dashboard.getRange("A1:K71");
var timeZone = Session.getScriptTimeZone();
var stringDate = Utilities.formatDate(new Date(), timeZone, 'dd/MM/yy HH:mm');
var me = Session.getEffectiveUser();
var description = 'Scripts running on ' + stringDate + ' by ' + me;
var protectionm = rangem.protect().setDescription(description);
protectionm.removeEditors(protectionm.getEditors());
//////////MODIFICATION HERE
protectionm.addEditor(user);
if (protectionm.canDomainEdit()) {
protectionm.setDomainEdit(false);
}
Utilities.sleep(300000);
}