Google Sheet 不同的单元格范围保护和访问级别(所有、特定、基于电子邮件)

问题描述 投票:0回答:1

有这个Google表格

SourceSheet(示例数据)可用:SourceSheet


尝试实施保护规则:

  • 范围 B2:B10B13:B21 可以由每个人编辑。
  • 范围 D2:D10F2:F10 只能由电子邮件帐户指定的用户编辑。
  • 所有其他剩余单元格都被
  • 保护并且没有人可以编辑它们。

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 ScriptGoogle Sheets来实现它?

google-sheets google-apps-script google-apps spreadsheet-protection
1个回答
0
投票
我相信您的目标如下。

    您想让所有用户编辑单元格
  • ['B2:B10', 'B13:B21']
  • 您想让特定用户编辑单元格 ['D2:D10', 'F2:F10']。
为了实现这个目标,我准备了以下流程。要测试我的脚本,请执行以下流程。

    准备一个 Google 电子表格。
  1. 与“用户 A”和“用户 B”共享电子表格。我是电子表格的所有者。
  2. 准备示例脚本。
    • 请根据您的情况设置变量。
  3. 运行示例脚本。
    • 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']
     之外的单元格只能由电子表格所有者编辑。
© www.soinside.com 2019 - 2024. All rights reserved.