如何复制具有受保护范围的工作表?

时间:2014-12-22 17:36:01

标签: google-apps-script google-sheets

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

3 个答案:

答案 0 :(得分:1)

我找到了一个复制具有权限的工作表的解决方案:

https://webapps.stackexchange.com/questions/86984/in-google-sheets-how-do-i-duplicate-a-sheet-along-with-its-permission/87000#87000

它看起来已经解决了,虽然我正忙于另一个目前隐藏权限列的问题。

此致

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这里是经过调整的代码,将从上面提示您输入要复制的工作表的名称以及您希望的新名称:

function duplicateSheetWithProtections() {
  var ui = SpreadsheetApp.getUi();
  var oldSheetName = ui.prompt('Sheet to Copy?');
  var newSheetName = ui.prompt('New Sheet Name?');
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  sheet = ss.getSheetByName(oldSheetName.getResponseText());
  sheet2 = sheet.copyTo(ss).setName(newSheetName.getResponseText()); 
  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());
      p2.addEditors(p.getEditors());
      // p2.setDomainEdit(p.canDomainEdit()); //  only if using an Apps domain 
   }
  }