【问题标题】:Using app scripts to prevent the deletion of a row in a google spreadsheet使用应用脚本防止删除谷歌电子表格中的一行
【发布时间】:2018-03-22 21:22:10
【问题描述】:

如果在另一个工作表的任何行的第一个单元格中找到第一个单元格的值,我需要防止删除工作表上的一行。 有没有办法使用谷歌应用脚​​本来完成这个?

【问题讨论】:

  • 保护您的工作表,不要让任何人修改它们。没有其他方法可以防止修改或覆盖 UI 元素/命令以要求对其进行身份验证。如果您想要这种类型的控件,您将需要构建一个包装 Google 表格的第 3 方客户端,并强制您的用户使用客户端应用程序。在该客户端应用程序中,您必须显式编写与谷歌表格交互的方法处理程序,因此可能会阻止用户在某些情况下发现数据时删除行。
  • 如果您的架构允许,您可以将行中的一列用于在其他工作表上显示该行值的“使用计数”,并根据其对单元格/行应用条件格式值,以便您的用户培训/入职方法强烈指导他们不要对具有该格式/标准的行使用删除行功能。不过,这仍然是一个无法执行的建议 - 用户可以简单地忽略该列的值并删除该行。

标签: google-apps-script google-sheets


【解决方案1】:

您可以使用onchange 事件来捕获行删除操作,然后进行检查,我不确定您是否可以阻止删除,但您可以重新插入已删除的行,因为该活动提供了您需要的所有信息。

【讨论】:

  • 感谢您的建议。使用已删除行中的单元格值重新插入对我来说效果很好。我看不到如何访问有关已删除行的信息。根据谷歌脚本文档,Change 事件公开的属性是 authmode、changeType、triggerUid 和 user。您能否就如何获取已删除的行信息提出建议?
  • 你是对的,它在 onchange() 事件中不可用。我现在看到的唯一方法是通过使用 onedit 事件复制插入和更新来保留工作表的第二个副本,然后在 onchange 事件期间使用 getactiverange() 将结果与镜像工作表进行比较并采取相应措施。
  • 再次感谢您的帮助。目前,我认为没有合理的方法可以使用应用脚本执行此父/子完整性检查。我很快得出结论,应用脚本不是我们想要完成的任务的合适工具。
【解决方案2】:

制作一个单独的列并像这样保护它的范围:

var ss = SpreadsheetApp.getActive();
var range = ss.getRange('A1:A');
var protection = range.protect();

这将阻止除您之外的任何人删除行,因为您是文档所有者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多