GAS:范围保护?

时间:2013-08-11 22:36:40

标签: google-apps-script range google-sheets protection

我到处寻找,看起来GAS还没有赶上Google Spreadsheet。是否有蛮力方法在纸张的某些范围内设置保护..? (使用所有公式制作受保护的纸张并提及它们对我没用。)

我是通过谷歌发现的:https://code.google.com/p/google-apps-script-issues/issues/detail?id=1721

我甚至在底部发表评论。 (更多的抱怨比任何有用的。)但我上面的那个人发布了这个代码:

//Function to Protect Target Sheet
function ProtectTargetSheet() {

      //Enter ID for each Worksheet
      var IDs = ["Sheeet_1", "Sheet_2"]

      //Enter Page to protect, in order of WorkSheets
      var Sheet_names = ["Page_1", "Page_2"]

      //For each sheet in the array
      for ( i = 0; i < IDs.length; i ++) {

        //id of sheet
        var sheet = IDs[i]

        //activate dedicated sheet
        var ActiveSheet = SpreadsheetApp.openById(sheet)

        //Find last row and column for each sheet
        var LastRow = ActiveSheet.getSheetByName(Sheet_names[i]).getLastRow();
        var LastCol = ActiveSheet.getSheetByName(Sheet_names[i]).getLastColumn();

        //Name of protectSheet
        var Name = "Protect_Sheet";

        //Range for Protection
        var Named_Range = ActiveSheet.getSheetByName(Sheet_names[i]).getRange(1, 1, LastRow, LastCol);

        //Impletment Protect Range
        var protected_Range = ActiveSheet.setNamedRange(Name, Named_Range);
      }
}

我不知道这可以如何在共享时为范围提供保护。它似乎只会创建一个命名范围。他确实说要先手动设置权限。但我无法确定他究竟是什么意思。

无论如何,我希望有人找到一种方法来实现这一目标,直到Google与其对手同步GAS。

我的愿望是,通过100%代码,在电子表格中选择工作表中的范围,并使其成为当我将整个电子表格分享给某个人时,他或她无法编辑该范围。该表中还有其他部分必须能够编辑。只是不是那个范围。这很容易手动执行,但是当必须创建100个电子表格时,能够通过GAS完成此操作会很有帮助。

感谢。

4 个答案:

答案 0 :(得分:1)

您的部分问题涉及保护工作表。请看这里:setProtected(protection)

至于编程保护范围没有。但是,您可以保护工作表,不需要在同一个电子表格中,然后创建一个onEdit触发器,它将用原始源数据替换“受保护”范围内的任何更改。

这样的事情:

function onLoad() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var protected = ss.getSheets()[1].getRange("A1:B2").getValues(); //You could use openByID to get from a different ss
  var target = ss.getSheets()[0].getRange("A1:B2").setValues(protected);
}

function onEdit(){ 
 onLoad();
}

每次对电子表格进行更改时,脚本都会重写您指定范围的工作表中的数据。

答案 1 :(得分:1)

我发现最简单的方法是使用数据验证:即编写一个脚本,检查每个单元格是否“受保护”,并创建并应用验证规则,强制输入现有内容并拒绝其他任何内容。 [当然,这也意味着您已经设计了电子表格,使得所有输入的数据都在片材或工作表上,与嵌入了公式的数据分开。在这些上你使用普通的纸张保护。]

答案 2 :(得分:0)

如果您要发送100张同一张纸的副本。然后创建模板工作表,手动保护其中的范围并发送模板的副本。它将保留保护。

很抱歉,但正如其他人所说,没有脚本方法在子表级别设置保护。

答案 3 :(得分:0)

根据2015年2月19日发布的Control protected ranges and sheets in Google Sheets with Apps Script,现在可以保护Google表格范围。

来自https://developers.google.com/apps-script/reference/spreadsheet/protection

  

班级保护

     

访问和修改受保护的范围和工作表。受保护的范围可以   保护静态范围的单元格或命名范围。受保护的   表格可能包括未受保护的区域。对于使用的电子表格   旧版Google表格,请使用PageProtection class   代替。

clusterProvider = new H.clustering.Provider({});