我有一个主表,我需要从中查看和过滤数据。使用 =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!");
}
}
非常感谢任何帮助。
最佳答案
从阅读您的代码来看,您似乎正在尝试做与您所解释的不同的事情。我看到您试图“修复”公式。但是为什么 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
上写了一些东西,它的值会自动恢复。尝试看看这是否适合您。
关于javascript - 防止在谷歌电子表格中编辑单元格 - 谷歌文档脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11384735/