使用谷歌应用程序脚本保护单元格(使用动态按钮或命令)

时间:2012-11-07 21:17:27

标签: google-apps-script google-sheets

是否有人知道是否可以为谷歌电子表格制作谷歌应用程序脚本,如果出现特定情况,它会保护特定单元格? FX。如果X出现在“A1”中,那么“A2”应该受到保护吗?

5 个答案:

答案 0 :(得分:1)

不是。我不相信这是细胞保护的工作方式。单元格是手动保护的,或根本不受保护。

没有启用该功能的单元格功能或脚本对象。

答案 1 :(得分:1)

还没有用于管理细胞保护的API。这feature request要求这样做。你可能希望明星来跟踪它的更新和投票类型。

答案 2 :(得分:0)

我知道这是一个老问题而且仍然是 - 谷歌"胎儿要求" (由Henrique Abreu发布)迄今为止没有任何进展(2014年底)

我的预感:当要求用户编辑之后被锁定的单元格(按标准或其他类型)时,此类功能将成为Google表单(http://www.google.com/forms/about)的解决方法逻辑)

我最近在我的工作场所遇到类似情况,我的解决方案非常简单 - 制作表格并与相关用户分享。表单字段将使用户能够填写他们应该锁定的数据。该表格将最终生成一张信息(每次填写表格时在线更新)。使用" IMPORTRANGE "来自另一个工作表的(https://support.google.com/docs/answer/3093340?hl=en)将导致查询"锁定"相关表格中的信息。由于数据在另一张纸内并且表示为公式 - 它无法编辑(至少不能作为数据)

我真的在考虑一个真正的解决方法,它实际上可以锁定"一个单元格(通过脚本将其值替换为原始单元格)..如果有这样的请求

答案 3 :(得分:0)

“功能请求”referred by Henrique G. Abreu已修复。参考comment #165

  

今天,我们已经启动了以编程方式创建和创建的功能   使用Apps脚本操纵受保护的范围和受保护的工作表。

     

使用Spreadsheet服务中的新Protection类,脚本   可以触及范围或表单保护的各个方面,就像在   新UI。 (较旧的PageProtection类,更有限   功能,将被弃用,但如果您需要,将坚持使用   使用旧电子表格。新的Protection类仅适用   到较新版本的Sheets。)

     

您可以在此处找到更多详细信息:

     

http://googledevelopers.blogspot.com/2015/02/control-protected-ranges-and-sheets-in.html

     

https://developers.google.com/apps-script/releases/#february_2015

     

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

答案 4 :(得分:-2)

我有一个解决方法,代码如下

function protect_named_range(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var target_sheet = ss.getSheetByName('Sheet1');//change "sheet1" for the sheet your range is in
  var array_range1 = target_sheet.getRange("A1:A1");
  var array_range2 = target_sheet.getRange("A2:A2");
  var range_test = array_range1.getValue();// or getFormula or what ever you want to test
  if(range_test == "correct answer"){ //if cell A2 = "correct answer" then cell B2 becomes a named range called "named_range"       
    ss.setNamedRange("named_range", array_range2);
   SpreadsheetApp.setActiveSheet(target_sheet);
   var sheet = SpreadsheetApp.getActiveSheet();
   var permissions = sheet.getSheetProtection();
   permissions.setProtected(true);
   target_sheet.setSheetProtection(permissions);
  }
 }

抱歉,我已经离开了一段时间。这是我将使用的基本代码,但如果单元格A2 =“正确答案,它实际上并不保护范围”B2“。如果单元格A2 =”正确答案“,它保护名为”sheet1“的工作表,以便只有电子表格所有者可以在工作表上编辑任何内容。

我知道这不是你所追求的,但我希望它可以提供帮助。