javascript - 防止在谷歌电子表格中编辑单元格 - 谷歌文档脚本

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

非常感谢任何帮助。

最佳答案

从阅读您的代码来看,您似乎正在尝试做与您所解释的不同的事情。我看到您试图“修复”公式。但是为什么 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/

相关文章:

javascript - 使用 API 将文件上传到预先设置的 Google Drive 帐户?

sql - 自动将数据从谷歌电子表格上传到 rdbms

REGEXEXTRACT 与捕获组

javascript - 隐藏列表项,直到单击下一步

javascript - 如何在 angularjs 中选择特定选项时显示 html 元素?

javascript - 有没有办法在不从头开始的网页上显示 gif 动画?

google-apps-script - 数据洞察看不到 Google 表格公式结果

google-apps-script - 清除范围但保留公式的脚本 - Gsheets

javascript - 无法使用 jquery 将 div 顶部属性设置为 0px

google-apps-script - 使用 Google Apps 脚本从 Admin Directory API 按部门获取用户