首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GAS:射程保护?

GAS:射程保护?
EN

Stack Overflow用户
提问于 2013-08-12 06:36:40
回答 3查看 3.5K关注 0票数 2

我找遍了所有地方,似乎GAS还没有赶上谷歌电子表格。有没有一种暴力方法来在一张纸上的某些范围内设置保护?(用所有公式制作一张受保护的工作表并引用它们对我没有帮助。)

我通过谷歌找到了这个:https://code.google.com/p/google-apps-script-issues/issues/detail?id=1721

我甚至在底部做了评论。(与其说是有用的东西,不如说是抱怨。)但在我上面的人发布了这段代码:

代码语言:javascript
复制
//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);
      }
}

我不明白这怎么能在共享时为范围提供保护。看起来它只是创建了一个命名范围。他确实说过要先手动设置权限。但我不明白他到底是什么意思。

无论如何,我希望到目前为止,有人已经找到了一种方法来做到这一点,直到谷歌将GAS与其对应产品同步。

我的愿望是,通过100%的代码,在工作表中选择一个范围,在电子表格中,这样当我将整个电子表格分享给一个人时,他或她就不能编辑这个范围。他们必须能够编辑该工作表中的其他部分。只是不是那个范围。手动完成这项工作很容易,但当必须创建数百个电子表格时,能够通过GAS完成这项工作将是有帮助的。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-08-12 12:49:46

你问题的一部分是关于保护床单的。请看这里:setProtected(protection)

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

如下所示:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-09-17 04:44:53

我找到的最简单的方法是使用数据验证:也就是说,编写一个脚本来检查每个要“保护”的单元格,并创建和应用一个验证规则,强制输入现有内容并拒绝任何其他内容。当然,这也意味着你已经设计好了你的电子表格,所有输入的数据都放在一个或多个表格上,与那些嵌入了公式的表格分开。在这些页面上,你可以使用普通的工作表保护。

票数 1
EN

Stack Overflow用户

发布于 2014-08-16 08:56:07

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18177404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档