如何复制具有受保护范围的图纸?

use*_*059 5 google-sheets google-apps-script

我已经建立了一个模板工作表,每周都会复制一次。我注意到当我复制它时,没有保护范围随它一起复制。是否可以使用Google Apps脚本将完全相同的受保护范围复制到重复的工作表中?每周可以为我节省很多时间。

小智 7

注意:在 Web Apps 上发布了一个类似的问题,因此我正在将我的部分答案改编为当前案例。


使用sheet.getProtections方法,您可以获得给定工作表上的保护数组,并遍历它们,在目标工作表上创建它们的类似物。这有点烦人,因为似乎没有方法可以简单地将保护克隆到另一个范围。(可以更改保护范围,但这会将其移动到新范围,而不是复制。)

因此,在下面的函数中,我执行以下操作:

  1. 获取每个受保护范围的 A1 符号 p.getRange().getA1Notation();
  2. 保护目标表的相应范围 p2 = sheet2.getRange(rangeNotation).protect();
  3. 设置性能新的保护p2按原保护性能p。如果保护不只是警告类型,这包括删除/添加编辑器。
function duplicateSheetWithProtections() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = ss.getSheetByName('Template');
  var sheet2 = sheet.copyTo(ss).setName('My Copy'); 
  var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var i = 0; i < protections.length; i++) {
    var p = protections[i];
    var rangeNotation = p.getRange().getA1Notation();
    var p2 = sheet2.getRange(rangeNotation).protect();
    p2.setDescription(p.getDescription());
    p2.setWarningOnly(p.isWarningOnly());
    if (!p.isWarningOnly()) {
      p2.removeEditors(p2.getEditors());  // remove editors 
      p2.addEditors(p.getEditors());      // except those permitted for original
      // p2.setDomainEdit(p.canDomainEdit()); //  only if using an Apps domain 
    }
  }
} 
Run Code Online (Sandbox Code Playgroud)


Sca*_*ael -1

保护可用于保护工作表中的各个范围,甚至更好的是,您可以保护整个工作表,然后在需要输入的地方取消保护特定范围。