SourceSheet(示例数据)可用:SourceSheet
尝试实施保护规则:
function setEditPermissions() {
var sheetUrl = 'https://docs.google.com/spreadsheets/d/1r3nQZ1ZS0Y9zUv1ZfdjQlWIVHSqf-wF4neNDksCse6Y/edit?usp=drive_link';
var sheetName = 'Sheet1';
protectAllCells(sheetUrl, sheetName )
setEditable(sheetUrl, sheetName)
setEmailAccess(sheetUrl, sheetName)
}
function protectAllCells(sheetUrl, sheetName ) {
var ss = SpreadsheetApp.openByUrl(sheetUrl);
var sheet = ss.getSheetByName(sheetName);
// Защищаем все ячейки на листе
var protection = sheet.protect().setDescription('Защита всего листа');
// Устанавливаем права доступа на редактирование
var me = Session.getEffectiveUser();
protection.addEditor(me);
}
function setEditable(sheetUrl, sheetName) {
var ss = SpreadsheetApp.openByUrl(sheetUrl);
var sheet = ss.getSheetByName(sheetName);
var editableRanges = ['B2:B10', 'B13:B21'];
editableRanges.forEach(function(rangeStr) {
var range = sheet.getRange(rangeStr);
var protection = range.protect().setDescription('Защита диапазона ' + rangeStr);
protection.remove();
});
}
function setEmailAccess(sheetUrl, sheetName) {
var ss = SpreadsheetApp.openByUrl(sheetUrl);
var sheet = ss.getSheetByName(sheetName);
// Диапазоны, которые нужно защитить
var rangesToProtect = ['D2:D10', 'F2:F10'];
// Пользователи, которым разрешено редактировать диапазоны
var allowedUsers = ['[email protected]'];
rangesToProtect.forEach(function(rangeStr) {
var range = sheet.getRange(rangeStr);
var protection = range.protect().setDescription('Защита диапазона ' + rangeStr);
// Удаляем все предыдущие редакторы
protection.removeEditors(protection.getEditors());
// Запрещаем редактирование всем, кроме указанных пользователей
protection.addEditors(allowedUsers);
// Разрешаем только указанным пользователям редактировать
//protection.setWarningOnly(true);
});
}
protectAllCells工作的工作表)。接下来的 2 个步骤(函数:setEditable、setEmailAccess)不起作用。但逻辑似乎是正确的。
Google Apps Script和Google Sheets来实现它?
['B2:B10', 'B13:B21']
。
var editableRanges = ['B2:B10', 'B13:B21']
可以由“用户A”、“用户B”和我编辑。
var rangesToProtect = ['D2:D10', 'F2:F10']
可以由“用户A”和我编辑。
var editableRanges = ['B2:B10', 'B13:B21']
和
var rangesToProtect = ['D2:D10', 'F2:F10']
之外的单元格只能由我编辑。
示例脚本:
在此脚本中,“用户 A”的电子邮件地址是
var allowedUsers = ['###'];
。
function myFunction() {
// Please set variables for your situation.
var sheetUrl = 'https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit'; // Please set your Spreadsheet ID.
var sheetName = 'Sheet1';
var editableRanges = ['B2:B10', 'B13:B21'];
var rangesToProtect = ['D2:D10', 'F2:F10'];
var allowedUsers = ['###']; // Please set email address you want to permit to edit the cells "rangesToProtect".
// Remove all protections.
var sheet = SpreadsheetApp.openByUrl(sheetUrl).getSheetByName(sheetName);
[...sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET), ...sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE)].forEach(p => p.remove());
// Protect a sheet and set unprotect ranges.
var editableRangesObj = sheet.getRangeList(editableRanges).getRanges();
var rangesToProtectObj = sheet.getRangeList(rangesToProtect).getRanges();
var p1 = sheet.protect().setDescription('Защита всего листа');
p1.removeEditors(p1.getEditors());
p1.setUnprotectedRanges([...editableRangesObj, ...rangesToProtectObj]).setDescription('Защита диапазона ' + editableRanges.join(","));
// Protect ranges with emails.
rangesToProtectObj.forEach(r => {
var p2 = r.protect().setDescription('Защита диапазона ' + r.getA1Notation());
p2.removeEditors(p2.getEditors());
p2.addEditors(allowedUsers);
});
}
['B2:B10', 'B13:B21']
和
['D2:D10', 'F2:F10']
被设置为不受保护的范围。此后,范围
['D2:D10', 'F2:F10']
将受到电子邮件的保护。
['B2:B10', 'B13:B21']
可以由“用户A”、“用户B”和电子表格的所有者编辑。
['D2:D10', 'F2:F10']
可以由“用户 A”和电子表格的所有者进行编辑。
['B2:B10', 'B13:B21']
和
['D2:D10', 'F2:F10']
之外的单元格只能由电子表格所有者编辑。