如何保护单元格区域,使其仅由所有者进行编辑?

时间:2018-08-16 18:05:33

标签: google-apps-script google-sheets google-docs

我有一个带有onEdit触发器的Google表格,该触发器运行Google Apps脚本代码以添加单元格范围保护。这个想法是,在编辑单元格后,电子表格将被锁定以防止编辑。添加数据后,您应该不能删除或修改单元格,因此电子表格可以充当分类账。

无论如何,这是触发器中的相关代码:

// Remove existing protected ranges
var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0;i<protections.length;i++) {
    if (protections[i].getDescription() === sheetname + range) {
        protections[i].remove();
    }
}

// Add Protected Range to prevent further editing up to the second from last row
var lastRow = SpreadsheetApp.getActiveRange().getLastRow() - 1;
var protectedRange = selectedSheet.getRange("A1:J".concat(lastRow));
var protection = protectedRange.protect().setDescription(sheetName() + ' Protection Range');

// Note: The spreadsheet owner is always able to edit protected ranges and sheets. 
var sheetOwner = SpreadsheetApp.getActiveSpreadsheet().getOwner();
protection.addEditor(sheetOwner); // Owner is the only one who can edit.
protection.removeEditors(protection.getEditors()); // Remove all editors.
if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
}

此代码已成功将保护添加到单元格,但是,当前登录用户始终可以对其进行编辑(因此所有者+当前用户可以进行编辑),从而破坏了保护。

我尝试了以下操作:

var sheetOwner = SpreadsheetApp.getActiveSpreadsheet().getOwner();
var me = Session.getEffectiveUser();
protection.addEditor(sheetOwner);
protection.removeEditor(me);

以及类似以下的内容:

protection.addEditors(['email@email.com']);
protection.removeEditors(protection.getEditors());

但是无论我做什么,似乎总是向当前用户授予“编辑”权限。这是为什么?如何删除当前用户对受保护范围的“编辑”权限?

1 个答案:

答案 0 :(得分:0)

我根本不是代码编写者,但是设法在用户在单元格中输入任何数据后限制用户对其进行编辑。

我正在使用以下简单代码,并且触发器处于编辑状态。输入后,此单元会自动锁定。只需在下面的代码中的删除编辑器中提及所有用户的电子邮件ID(具有编辑权限)

function LOCKALL() {
var spreadsheet = SpreadsheetApp.getActive();
var protection = spreadsheet.getActiveRange().protect();
protection.setDescription('LOCKALL')
.removeEditors(['mention email id' , 'mention email id']);
};