【问题标题】:protecting cells with google apps script (with dynamic button or command)使用谷歌应用脚​​本保护单元格(使用动态按钮或命令)
【发布时间】:2012-10-28 00:29:16
【问题描述】:

有谁知道是否可以为谷歌电子表格制作一个谷歌应用脚​​本,以在特定情况发生时保护特定单元格? 外汇。如果 X 出现在“A1”中,那么“A2”应该受到保护吗?

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    目前还没有用于管理单元保护的 API。这个feature request 要求这个。您可能想要star它以跟踪更新并为它投票。

    【讨论】:

      【解决方案2】:

      事实并非如此。我不相信这是细胞保护的工作方式。单元格被手动保护,或者根本没有保护。

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

      【讨论】:

        【解决方案3】:

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

        今天,我们推出了以编程方式创建和 使用 Apps 脚本操作受保护的范围和受保护的工作表。

        使用电子表格服务中的新保护类,您的脚本 可以触及范围或工作表保护的各个方面,就像在 新的用户界面。 (旧的 PageProtection 类,它有更多的限制 功能,将被弃用,但会在您需要时保留 使用较旧的电子表格。新的保护等级仅适用 到较新版本的表格。)

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

        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】:

          我知道这是一个老问题,但谷歌“feture request”(由 Henrique Abreu 发布)到现在(2014 年底)还没有进展

          我的预感:当用户被要求编辑之后被锁定的单元格(通过标准或其他类型的逻辑)时,这种功能将是谷歌表单 (http://www.google.com/forms/about) 的一种解决方法

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

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

          【讨论】:

            【解决方案5】:

            我有一个变通办法,代码如下

            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”的工作表,以便只有电子表格所有者可以编辑工作表上的任何内容。

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

            【讨论】:

            • 酷——你能完成它吗?
            • 拜托 :D 如果你能完成代码那就太好了 - 到目前为止它看起来很棒!
            • 这是为了保护整张纸,而不是一组单元格。
            • -1,正如@eddyparkinson 所说,问题是关于细胞保护而不是表保护
            猜你喜欢
            • 2023-03-14
            • 2022-12-03
            • 2022-10-17
            • 1970-01-01
            • 1970-01-01
            • 2012-06-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多