1

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

问题是我一直不小心编辑主表中的数据,而不会更新原始副本。

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

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

(我不确定这是否是这个问题的正确位置,它是这个还是 stackexchange / 超级用户,如果它是错误的,请告知。)

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!");
  }
}

非常感谢任何帮助。

4

2 回答 2

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,它的价值会自动回来。试试看这对你来说是否是一个好的解决方案。

于 2012-07-11T14:53:10.513 回答
0

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

于 2012-08-08T08:53:02.480 回答