Google Apps 脚本范围保护锁定标签颜色和标签重命名

Google Apps Script Range Protection Lock Tab color and Tab Renaming

具有多个选项卡的电子表格有 10 个 editors/access。我想在其中 8 个编辑器的每个选项卡中锁定一些 运行ges。

当我运行 google 下面写的应用程序脚本时,它还锁定了 8 个编辑器,无法编辑选项卡名称甚至选项卡颜色。可以建议我哪里出错了吗?我希望他们仍然能够更改标签名称和标签颜色。

function addClassProtectionFor_Current(){ //Main function to run

  var currentclasstab = SpreadsheetApp.getActiveSheet();

  // Remove all range protections in the spreadsheet
  var protections = currentclasstab.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var i = 0; i < protections.length; i++) {
    var protection = protections[i];
    protection.remove();
  }

  var protection = currentclasstab.protect();
  //restrict editors to owner
  protection.getRange().getA1Notation();
  var eds = protection.getEditors();
  protection.removeEditors(eds);
  

  //Add Editors to give access to the protected ranges
  protection.addEditors(["me.gmail.com","you@gmail.com"]);

  //set unprotected ranges
  var ranges = protection.getUnprotectedRanges();

  //Ranges to leave unlocked
  var data = ["A5:V19","B23:V26","B29:V35","B39:V45"];

  data.forEach(res => { //LOOPS INTO EVERY ARRAY CONTAINING SPECIFIC RANGES
    ranges.push(currentclasstab.getRange(res));
    protection.setUnprotectedRanges(ranges); //REMOVES THE PROTECTION ON THE RANGE
  });
}

我相信你的目标如下。

  • 您想保护除 A5:V19,B23:V26,B29:V35,B39:V45 单元格之外的所有单元格不被用户访问。
  • 您想让用户在单元格受保护的情况下更改选项卡名称和选项卡颜色。
  • 您想使用 Google Apps 脚本实现此目的。

问题和解决方法:

不幸的是,在当前阶段,“UnprotectedRanges”似乎不能用于受保护的sheet。在这种情况下,用户无法更改选项卡名称和选项卡颜色。因此,在您的情况下,作为解决方法,为了让用户更改选项卡名称和选项卡颜色,需要保护除 A5:V19,B23:V26,B29:V35,B39:V45 之外的所有单元格。当这反映在您的脚本中时,它会变成如下。

修改后的脚本:

function addClassProtectionFor_Current() {
  var currentclasstab = SpreadsheetApp.getActiveSheet();
  var protections = currentclasstab.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var i = 0; i < protections.length; i++) {
    var protection = protections[i];
    protection.remove();
  }
  var ranges = ["A1:4", "W5:19", "A20:A", "B20:22", "B27:28", "B36:38", "W23:26", "W29:35", "W39:45", "B46:" + currentclasstab.getMaxRows()];
  currentclasstab.getRangeList(ranges).getRanges().forEach(r => {
    const protection = r.protect();
    var eds = protection.getEditors();
    protection.removeEditors(eds);
    protection.addEditors(["me.gmail.com","you@gmail.com"]);
  })
}
  • 在此脚本中,ranges 的值是除 A5:V19,B23:V26,B29:V35,B39:V45 之外的所有单元格。如果您想保护其他单元格,请将它们添加到阵列中。

参考: