Google电子表格脚本:禁用其他用户表单添加,删除或移动列

时间:2014-07-20 23:57:14

标签: google-apps-script google-sheets

忍受我,这是我第一次编码或使用stackoverflow。我一直在搜索谷歌文档和各种搜索引擎寻找答案,有人告诉我在这里尝试。

我在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()
    } 
  }
}

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

非常感谢任何帮助。对不起再次抱歉。

1 个答案:

答案 0 :(得分:1)

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

当您说阻止他们更新意味着您不希望他们具有写入权限的列时。要么是特定列,要么是任何列。您可以将保护设置为仅查看之一,仅注释;

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

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

阅读你的代码,行;

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

意味着您要检查他们是否已连续修改了工作表。

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

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

如果有人试图添加或删除一行,这将覆盖隐藏的受保护列,他们将收到一条错误消息告诉他们。

现在唯一的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();     

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