防止在谷歌电子表格中编辑细胞 - 谷歌文档脚本

时间:2012-07-08 16:28:38

标签: javascript google-apps-script google-sheets

我有一张主表,我需要查看和过滤数据。使用=Sheet2!B7语法将数据放入工作表。

问题是我不小心编辑了主表格中没有更新原始副本的数据。

如果我在主表单中并且阻止我编辑单元格,我想要一个警告我的脚本。我仍然希望能够过滤数据,因此只需锁定工作表即可。

我一直在尝试修改这个脚本(由Yuzhy发布)但到目前为止我还没能让它工作。

(我不确定这是否是这个问题的正确位置,它是这个或者是stackexchange / superuser,如果它是错误的请告知。)

function onEdit(event){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var CellRow = SpreadsheetApp.getActiveRange().getRow();
  var CellColumn = SpreadsheetApp.getActiveRange().getColumn();

  if (CellColumn == 2){
    sheet.getRange(CellRow, CellColumn).setFormula("=A"+CellRow+"+1");
    Browser.msgBox("DON'T MESS WITH THE FORMULAS!");
  }
}

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:2)

通过阅读您的代码,您似乎正在尝试从您所解释的内容中做出与众不同的事情。我看到你试图“修复”这些公式。但为什么if (CellColumn == 2 )?您只想保护列B,而不是整个“主”表?

您可以分享一下表单结构的样本电子表格吗?

无论如何,我想你要在你的“主”表上覆盖任何东西时要警告,自动修复公式有点复杂(取决于你的情况),并且在阅读弹出窗口之后很容易只需点击撤消并恢复它。但你真的是要自动修复公式,我会在你分享你的电子表格样本后增强我的代码,因为它有点复杂,并且在很大程度上取决于你的结构。

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "Master" )
    Browser.msgBox("DON'T MESS WITH THE FORMULAS!");
}

如果您在其他工作表上执行简单的参考公式,那么使用ArrayFormula会更容易,也许是一个很好的解决方案,当您更改除第一个单元格之外的任何单元格时会自动替换该值,但是那么手动撤销将是如此罕见和明显,我认为这不会是一个问题。我在你链接的电子表格上做了一个数组公式的例子,请看一下。在A1我写道:

=ArrayFormula(Sheet1!A1:F20)

现在,如果您在B2上意外地写了一些东西,它的值会自动返回。试着看看这是否是一个很好的解决方案。

答案 1 :(得分:0)

更新 - 截至8/8/12谷歌已更新其电子表格,现在允许您拥有“受保护的范围” - https://support.google.com/docs/bin/answer.py?hl=en&answer=63175