google-apps-script - Google 电子表格脚本 : Disable Other Users Form Adding, 删除或移动列

标签 google-apps-script google-sheets

请耐心等待,这是我第一次编码或使用 stackoverflow。我一直在搜索 Google 文档和各种搜索引擎以寻找答案,有人告诉我在此处尝试。

我在 Google 驱动程序中有一个共享电子表格,我正在尝试编写一个脚本来防止除我以外的任何其他用户添加、删除或更新列。这是我目前所拥有的:

function onOpen() 
{
  var ss = SpreadsheetApp.getActive();

  var items = 
  [
    {name: 'Show alert', functionName: 'showAlert'},
  ];

  ss.addMenu('Custom Menu', items);
}

function onEdit(e)
{
   var activeUsersEmail = Session.getActiveUser().getEmail();

   //if (e.eventType == 'INSERT_ROW' || 'UPDATE_ROW' || 'DELETE_ROW')
   //{
     showAlert(activeUsersEmail);
   //}
}

function showAlert(activeUsersEmail) 
{
  if (activeUsersEmail != 'mypersonalemail@gmail.com')
  {
    var result = Browser.msgBox
    (
      'Permission Denied,
      'Please contact Anne Murphy at mypersonalemail@gmail.com if you wish to update a column.',
      Browser.Buttons.OK
    );

    if (result == 'OK') 
    {
      Browser.Close()
    } 
  }
}

我似乎无法检查这三种情况的事件类型...此外,一旦我知道我可以检查事件的添加、更新或移动,我该如何阻止用户实际执行此操作?

任何帮助将不胜感激。再次抱歉,我迷路了。

最佳答案

在共享电子表格中,为了防止除我以外的任何其他用户添加、删除或更新您不需要脚本的列。

当您说阻止他们更新列时,这意味着您不希望他们具有写入权限。这是针对特定列或任何列。您可以将保护设置为仅查看、仅评论之一;

  • 整个电子表格
  • 单张或
  • 工作表中的区域

如果您执行其中任何一项操作,他们也将无法删除该列。

阅读你的代码,行;

//if (e.eventType == 'INSERT_ROW' || 'UPDATE_ROW' || 'DELETE_ROW')

表示您想检查他们是否逐行修改了您的工作表。

为了防止他们插入或删除一行,

  • 创建一个空白列
  • 保护专栏不被编辑
  • 隐藏该列

如果有人试图添加或删除一行,这将跨越隐藏的 protected 列,他们将收到一条错误消息,告诉他们这一点。

现在,您唯一会检测到的 onEdit(e) 是对一个单元格或一组单元格的编辑。

请注意,添加/删除行不会触发 onEdit(),它们会触发 onChange()。 其中有一种特定的方法可以判断一行是否已被删除或插入。

onEdit(e) 将允许您查看受影响的范围,您可以使用电子表格参数交叉检查,

var sheet      = e.source.getActiveSheet();
// the last column of the sheet that contains content
var lastColumn = sheet.getLastColumn();
// Returns the position of the last row that has content  
var lastRow    = sheet.getLastRow();
// Returns the number of columns independently of content in target sheet 
var maxColumn  = sheet.getMaxColumns();     
// Returns the number of rows independently of content in target sheet 
var maxRow     = sheet.getMaxRows();     

我不清楚你的问题和代码究竟是你想做什么。如果我误解了请解释,我会修改我的帮助。假设这仍然很有趣并且回复还不算太晚。

关于google-apps-script - Google 电子表格脚本 : Disable Other Users Form Adding, 删除或移动列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24856045/

相关文章:

google-sheets - 如何从非连续数字列表创建范围显示?

google-apps-script - 如何将 "custom function help"添加到谷歌电子表格。 - 不是脚本编辑器

google-apps-script - sheet.appendRow() 偶尔会以静默方式失败并导致空行

google-apps-script - 创建每秒运行的脚本

javascript - 设置 Google 文档插件侧边栏的宽度不起作用

google-apps-script - getNamedRanges() 上的 Google 表格脚本服务器错误

HTML 表单未运行 (withSuccessHandler) 函数

javascript - Crypto-Js 库的 hmac-256 脚本返回函数结构而不是 Google Apps 脚本中的值,在外部工作正常吗?

javascript - 如何使用javascript从谷歌电子表格中一列的所有值中获取排序的唯一值

javascript - 异常 : Document is missing (perhaps it was deleted, 或者您没有读取权限?)