忍受我,这是我第一次编码或使用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>
非常感谢任何帮助。对不起再次抱歉。
答案 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();
我不清楚你的问题和代码是什么,你想要做什么。如果我误解了请解释,我会修改我的帮助。假设这仍然是有趣的,并且回复也不会太晚。